【问题标题】:How to include jar file as dependency?如何包含 jar 文件作为依赖项?
【发布时间】:2021-07-16 08:19:38
【问题描述】:

有这个布局:

.
├── lib
│   └── Calculator.jar
├── TestLib
│   ├── com
│   │   └── example
│   │       └── util
│   │           ├── Calculator.class
│   │           └── Calculator.java
│   └── manifest.txt
└── TestWeb
    └── com
        └── example
            └── Runner.java

Calculator.java:

package com.example.util;

public class Calculator{
    public int add(int i, int j){
        return i + j;
    }
}

Runner.java:

package com.example;

import com.example.util.Calculator;

public class Runner{
    public static void main(String[] args){

        Calculator c = new Calculator();
        System.out.println(c.add(4, 8));
    }
}

我已将 jar 文件从 Calculator.class 制作成 lib/Calculator.jar。现在我想在Runner.java 类中使用Calculator 对象。所以如果我发出:

javac -cp .:lib/Calculator.jar TestWeb/com/example/Runner.java

我明白了

TestWeb/com/example/Runner.java:3: error: package com.example.util does not exist
import com.example.util.Calculator;
                       ^
TestWeb/com/example/Runner.java:8: error: cannot find symbol
        Calculator c = new Calculator();
        ^
  symbol:   class Calculator
  location: class Runner
TestWeb/com/example/Runner.java:8: error: cannot find symbol
        Calculator c = new Calculator();
                           ^
  symbol:   class Calculator
  location: class Runner
3 errors

我做错了什么?

【问题讨论】:

    标签: java jar compilation javac


    【解决方案1】:

    类路径语法取决于操作系统。来自Wikipedia

    由于与文件系统密切相关,命令行 类路径语法取决于操作系统。[1]例如:

    在所有类 Unix 操作系统(例如 Linux 和 Mac OS X)上, 目录结构具有 Unix 语法,具有单独的文件路径 用冒号 (":") 分隔。在 Windows 上,目录结构具有 Windows 语法,每个文件路径必须用分号隔开 (";")。这不适用于在清单中定义类路径时 文件,其中每个文件路径必须用空格 (" ") 分隔, 与操作系统无关。

    【讨论】:

    • 我在 unix,ubuntu 上。问题不是 witb 分隔符,而是编译器无法找到包含的库(在 jar 中)。再看一遍这个问题。
    • java -cp ./lib/Calculator.jar com.example.util.Calculator 是你所需要的
    • 这是包含jar文件的方式,但是如何与Runner.java一起使用,main()函数在哪里呢? jar 文件只是帮助库
    【解决方案2】:

    如果我遗漏了您需要的任何东西,请告诉我:

    goose@t410:/tmp/build$ tree -n
    .
    ├── lib
    │   └── Calculator.jar
    ├── TestLib
    │   └── com
    │       └── example
    │           └── util
    │               ├── Calculator.class
    │               └── Calculator.java
    └── TestWeb
        └── com
            └── example
                ├── Runner.class
                └── Runner.java
    
    goose@t410:/tmp/build$ java -cp lib/Calculator.jar:TestWeb com.example.Runner
    12
    goose@t410:/tmp/build$ 
    

    【讨论】:

    • 我已经创建了 jar 文件。它位于./lib。但我不能以某种方式用主类(Runner.java)编译它。作为java -cp ./lib/Calculator.jar ./TestWeb/com/example/Runner.java。你明白我在问什么吗?
    猜你喜欢
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 2015-04-04
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    相关资源
    最近更新 更多