2017-08-24 162 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