【问题标题】:How to use many jar files?如何使用多个jar文件?
【发布时间】:2019-03-19 05:03:30
【问题描述】:

是否可以使用另一个 jar 中的类而不是主类?

我的工作目录:

.
|-- Main.java
|-- Makefile
|-- Manifest
`-- original
    `-- Test.java

Main.java:

public class Main {
    public static void main (String[] args) {
       Test.test();
    }
}

Test.java:

public class Test {
    public static void test() {
        System.out.println("This is a test");
    }
}

Manifest:

Main-Class: Main

所以,我愿意:

javac -source 1.6 -target 1.6 -classpath original/:./ Main.java
javac -source 1.6 -target 1.6 -classpath original/:./ original/Test.java

它会生成Main.class and original/Test.class 我可以用java -classpath original/:./ Main 运行它。这就是我想要的。

但现在我需要jar 文件。如何正确操作?

我试过了:

jar cfm Main.jar Manifest Main.class
jar cfm original/Test.Jar Manifest original/Test.class

但是在这里我不知道如何正确运行我的Main

如果我这样做:java -jar -classpath original/:./ Main

我收到了Error: unable to access jarfile Main

如果我这样做:java -jar original/Test.jar Main.jar

我收到了Error: could not find or load main class Main

我被困在这里了。

【问题讨论】:

    标签: java jar classpath executable-jar


    【解决方案1】:

    好的,刚刚注意到,您的 Test.java 文件在原始文件夹中,因此您需要声明包原始;在顶部,所以您的 Test.java 文件应该是这样的,

    package original;
    
    public class Test {
    
        public static void main(String args[]) {
            System.out.println("Hello Test");
        }
    }
    

    然后你需要通过以下命令编译 Main.java 和 original\Test.java,

    javac Main.java original\Test.java
    

    然后运行这个命令来创建你的jar文件,

    jar cf main.jar Main.class original\Test.class
    

    这将创建 main.jar 文件,然后您可以运行以下命令来运行 Main 或 Test 程序,

    java -cp main.jar Main
    

    java -cp main.jar original.Test
    

    如果您遇到任何问题,请告诉我。

    【讨论】:

    • 但这是我的问题,java -cp Main.jar Main 给了我一个ClassNotFoundException。我需要两个jar 文件并动态“链接”它们。
    • 好的,我刚刚注意到,您的 Test.java 文件在原始文件夹中,因此您必须声明包原始;在您的 Test.java 文件中
    • 现在我有second/Test.java 和相同的原型。如何更改程序的行为,而不更改 Main.javaMain.jar 而只是更改类路径? .class 这样的文件是可能的:java -classpath original/:./ Mainjava -classpath second/:./ Main
    • 没有问题,就像 original\Test.java 你需要声明“第二个包;”在 second/Test.java 文件的顶部并像 original/Test.java 一样跟随 rest 并且在运行命令运行时,您必须编写 java -cp main.jar second.Test
    【解决方案2】:

    这应该是您应该开始使用 Maven 或 Gradle 来构建应用程序的地方。

    这样,您可以在构建的 .jar 文件中包含外部库,而您几乎无需担心选择正确的 .jar 依赖项

    【讨论】:

    • 我会推荐一个初学 Java 程序员一段时间来完成这些基本命令,这样他们就可以了解一些内部知识,了解程序是如何编译和运行的,以防他们不得不做这些事情在一些远程机器上,由于某种原因他们不能使用花哨的 IDE。
    • 顺便说一句,我的命令在 Makefile 中,我没有使用任何 IDE,也不想使用。
    • maven 不需要 IDE。对于测试项目,有时您可能想尝试命令,我同意这一点
    【解决方案3】:

    我接下来跑:

    • 编译类 javac -source 1.6 -target 1.6 -classpath original/:./ original/Test.java javac -source 1.6 -target 1.6 Main.java
    • 创建罐子 jar cfe app.jar Main Main.class original/Test.class
    • 运行罐子 java -jar app.jar 输出:This is a test

    【讨论】:

      猜你喜欢
      • 2011-09-15
      • 1970-01-01
      • 2014-10-03
      • 2016-11-03
      • 1970-01-01
      • 1970-01-01
      • 2013-06-21
      • 2014-05-22
      • 1970-01-01
      相关资源
      最近更新 更多