2017-08-24 150 views
3

我想弄清楚在Windows中解决长类路径问题的方法。虽然我在Linux中(这就是为什么下面的示例是unix格式的),但最终用户可能在linux中,而且我知道问题发生了。长Java类路径解决方案

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

java -classpath path_to_file1:path_to_file2:path_to_file3 jvm_args MainClass 

并运行该应用程序。这在Linux中正常工作,但在Windows中爆炸,因为类路径太长。

我的理解这个问题,我已经尝试了提出的解决方案:(!它是在classpath)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(); 
    } 
} 

现在,如果我在[根]并运行:

java -cp classes com.tst.CPTest3 

我看到了正确的输出。 但是,如果我第一次产生了“寻路罐子”为我指出表明,通过创建一个文件解决方案: cpTest.txt(我已经相对和完整路径尝试这样做)

Class-Path: classes 

和使用创建的jar:

jar -cvfm cp.jar cpTest.txt 

比终于尝试运行:

java -cp cp.jar com.tst.CPTest3 

所有我GE t是找不到CPTest3类的错误:

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

我在想什么? 感谢您的帮助!

+0

你确定com.tst.CPTest3在cp.jar中吗?您可以通过解压缩该jar来轻松检查。如果你在类路径上需要很多jar文件,也可以使用清单文件:https://docs.oracle.com/javase/tutorial/deployment/jar/downman.html – inovaovao

+0

这是否只适用于jar?我创建的jar不包含带有类路径条目的Manifest文件以外的任何内容。我明白这是在我提到的帖子回答背后的想法 – fditz

+0

可能的重复[如何在Windows中设置一个长的Java类路径?](https://stackoverflow.com/questions/201816/how-to-set-a -long-java-classpath-in-windows) – rghome

回答

1

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

+0

这个行为的解决方法,那就是我通过创建“pathing jar”所做的不是吗?我的意思是在我的例子中,我没有使用其他的罐子,而只是上课......我想试试这个,因为在我的实际项目中,我有JAR以及Manifests,图像等等,等等 – fditz