【问题标题】:Long Java classpath solution长 Java 类路径解决方案
【发布时间】:2017-08-24 19:18:20
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您确定 com.tst.CPTest3 在 cp.jar 中吗?您可以通过解压缩罐子轻松检查。如果您在类路径上需要许多 jar,还可以考虑使用清单文件:docs.oracle.com/javase/tutorial/deployment/jar/downman.html
  • 这只适用于罐子吗?我创建的 jar 不包含除带有类路径条目的清单文件之外的任何内容。我知道这就是我提到的帖子答案背后的想法
  • 您可能已经看到,我在描述中提到了这个问题。所以它不是重复的,而是我不理解行为的解决方案尝试

标签: java classpath


【解决方案1】:

使用java -jar 并将所有依赖的JAR 文件放入主JAR 文件的Class-path 清单条目中。

【讨论】:

  • 这就是我通过创建“pathing jar”所做的,不是吗?我的意思是在我的示例中,我没有使用其他 jar,而只是使用类...我想尝试一下,因为在我的实际项目中,我有 JAR 以及清单、图像等等
猜你喜欢
  • 2015-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多