2011-01-04 6 views
4

を得るのですか、私はそのマニフェストファイルのClass-Pathエントリに2瓶を持つ実行可能なjarファイルを持っている:はどのように私はマニフェストのクラスパス・エントリーからのjarファイル

Class-Path: module1-0.0.1-SNAPSHOT.jar base-0.0.1-SNAPSHOT.jar 
Main-Class: test.MySPI 

プログラムが正常に動作し、内のすべての依存関係参照されたjarが満たされます。しかし、私はクラスパスにアクセスしようとすると、jarファイルが存在しない。明らかに、システムはそれらの見つけたので、

String classpath = System.getProperty("java.class.path"); 
String[] entries = classpath.split(System.getProperty("path.separator")); 
for (String entry : entries) { 
    System.out.println("Entry: " + entry); 
} 

のみ

Entry: .\module2-0.0.1-SNAPSHOT.jar 

を与えることは、実際のクラスパスにアクセスする方法は、ありますパス上の瓶?

+0

システムプロパティに依存することはできません。 JVMに依頼してください。 –

答えて

3

を使用してClass-Path属性を抽出するためにManifestクラスを使用する必要があるだろうと思い、あなたが実際にあなたがJARファイルの場所を必要とする、または実行でくださいそれらからリソースをロードするだけでいいですか?

リソースをロードするだけの場合は、java.lang.ClassLoader、その静的getSystemClassLoader()メソッド、および静的java.lang.Thread.currentThread().getContextClassLoader()メソッドに興味があります。

Jarファイル名からバージョン文字列を読み込みたいと思ったのですが、もしそれらがあなたのコントロール下にあったとしたら... Package.getPackage("my.package").getImplementationVersion()を使い、コンポーネントjarのマニフェストに必要な値が書き込まれます。

+1

実際、私はすべてのjarファイルに関する詳細を知りたいクラスパスを使用して、すべてのモジュールのバージョンを指定します。私はthis.getClass()。getClassLoader()。getResources( "META-INF/MANIFEST.MF");を使ってそれを解決しました。 –

5

私はあなたのMANIFEST.MFファイルを読み込み、そのクラスに

+0

あなたは正しいです!これは、ManifestのClass-PathエントリのJava仕様ラインのブレーキ/ラッピングに対処する必要がある場合に便利です。私はこの問題を抱えていて、この回答が私を大いに助けました! デプロイされたWebアプリケーションでは、次のコードを使用しました。 新しいManifest((InputStream)httpRequest.getServletContext()。getResource( "/ META-INF/MANIFEST.MF")。getContent()); SN:http://stackoverflow.com/questions/7402271/maven-archiver-putting-in-weird-line-breaks-in-classpath-for-manifest – David

関連する問題