2017-08-24 2 views
3

私は、長いクラスパスの問題をWindowsで回避する方法を見つけようとしています。私はLinuxに入っていますが(そのため、Unix形式の例があります)、エンドユーザーはLinuxにいる可能性があり、問題が発生していることがわかります。長いJavaクラスパスソリューション

私のアプリケーションは、実行する必要があるjarファイルとファイルの文字列をダウンロードして作成します。これは以下のような文字列を生成します。

java -classpath path_to_file1:path_to_file2:path_to_file3 jvm_args MainClass 

そして、アプリケーションを実行します。これはLinuxではうまくいきますが、クラスパスが長すぎるため、ウィンドウで爆発します。 MainClassへのパスが見つからないので、私は成功していないが(それはクラスパス上にある!)How to set a long Java classpath in Windows?

私は理解し、私は解決策を試してみました問題は、上の提案しました。ここに私がやったことです:

私は、次のフォルダ構造を持っている:

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

クラスが呼び出すことによってコンパイルされた:

CPTest1:

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

そしてここでは、ファイルがあります.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 

すべてのI GE tはCPTest3クラスが見つからないというエラーです。

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

私は何が欠けていますか? 助けてくれてありがとう!

+0

com.tst.CPTest3がcp.jarにあることを確認してください。瓶を解凍して簡単に確認できます。クラスパスに多くのjarファイルが必要な場合は、マニフェストファイルを使用してください。https://docs.oracle.com/javase/tutorial/deployment/jar/downman.html – inovaovao

+0

これはJARでのみ動作しますか?私が作成したjarファイルには、class-pathエントリを持つ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ファイルのクラスパスマニフェストエントリに入れます。

+0

"パスジャー"を作成することによってうまくいきましたか?私の例では、私は他の瓶を使用していませんが、クラスだけです...私は実際のプロジェクトでJARとマニフェスト、画像などを持っているので、これを試したかったのです – fditz