java - 长Java类路径解决方案

标签 java classpath

我正在尝试找出解决 Windows 中类路径过长问题的方法。虽然我在 Linux 中(这就是为什么下面的示例采用 unix 格式),但最终用户可能在 linux 中,我知道问题发生了。

我的应用程序下载并创建它需要运行的 jar 和文件的字符串。它会生成一个字符串,例如:

java -classpath path_to_file1:path_to_file2:path_to_file3 jvm_args MainClass

并运行应用程序。这在 Linux 中运行良好,但在 Windows 中会爆炸,因为类路径太长。

我理解的问题并尝试了建议的解决方案:How to set a long Java classpath in Windows?

但是我没有成功,因为找不到 MainClass 的路径(它在类路径上!)。这是我所做的:

我有以下文件夹结构:

[root]
├── classes
│   └── com
│       └── tst
│           ├── CPTest1.class
│           ├── CPTest2.class
│           └── CPTest3.class
└── com
    └── tst
        ├── CPTest1.java
        ├── CPTest2.java
        └── CPTest3.java

这些类是通过调用编译的:

javac -d classes -cp . com/tst/*

这是文件:

CPTest1.java

package com.tst;

public class CPTest1{
    public static void main(String[] args) {
        System.out.println ("Run CPTest1.main()");
    }
}

CPTest2.java

package com.tst;

public class CPTest2 {
    public static void main(String[] args) {
        System.out.println ("Run CPTest2.main()");
        CPTest1 cpt1 = new CPTest1();
    }
}

CPTest3.java

package com.tst;

public class CPTest3 {
    public static void main(String[] args) {
        System.out.println ("Run CPTest3.main()");
        CPTest1 cpt1 = new CPTest1();
        CPTest2 cpt2 = new CPTest2();
    }
}

现在,如果我在 [root] 上运行:

java -cp classes com.tst.CPTest3

我看到了正确的输出。 但是,如果我首先按照我指出的解决方案通过创建文件来生成“路径 jar”: cpTest.txt(我已经用相对路径和完整路径试过了)

Class-Path: classes

并使用以下方法创建 jar:

jar -cvfm cp.jar cpTest.txt

最终尝试运行:

java -cp cp.jar com.tst.CPTest3

我得到的只是找不到 CPTest3 类的错误:

Error: Could not find or load main class com.tst.CPTest3

我错过了什么? 感谢您的帮助!

最佳答案

使用 java -jar 并将所有依赖的 JAR 文件放入主 JAR 文件的类路径 list 条目中。

关于java - 长Java类路径解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45859357/

相关文章:

java - 多部分文件的空检查

java - 使用 Mockito 将 cookie 添加到 HttpServletRequest 并从 HttpServletResponse 检索 cookie

java - 使用类路径参数运行 jar

java - 在更新 Maven 项目时,它会在 .classpath 文件中删除 eclipse 中的属性名称 ="org.eclipse.jst.component.dependency"

java - 在命令行中捕获 RuntimeException 'cross-borders"——源自一个 jar 并抛出到另一个 jar 中

java - 从 Struts 到 Tapestry 的零碎转换 5

java - 启动过滤器 struts2 java.lang.ClassNotFoundException 异常 : org. apache.struts2.dispatcher.FilterDispatcher

java - 可执行 Jar 的 NoClassDefFoundError

java - 如何为maven exec :java?配置类路径

java - 如何在 Hadoop mapreduce 中处理负载平衡?