2017-08-04 22 views
4

jarコマンドでマルチリリースjar(Java 8とJava 9用)を作成したいと考えています。 いくつかのNetbeans IDEプロジェクトがあります:com.jdojo.mrjar.jdk8、com.jdojo.mrjar.jdk9。 プロジェクトのソースコードはhereです。 コマンドラインを使う私は親フォルダに行き、コマンドを実行します。 私はこれを行うにしようとすると:マルチリリースjarを作成し、入力コンテンツをフィルタリングする方法は?

jar --create --file mrjars/com.jdojo.mrjar.jar 
    -C com.jdojo.mrjar.jdk8/build/classes . 
    --release 9 -C com.jdojo.mrjar.jdk9/build/classes . 

を私はメッセージが表示されます:

Warning: entry META-INF/versions/9/.netbeans_automatic_build contains a class that 
is identical to an entry already in the jar 
Warning: entry META-INF/versions/9/.netbeans_update_resources contains a class that 
is identical to an entry already in the jar 
java.nio.file.NoSuchFileException: java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:85) 
     at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103) 
     at java.base/sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:384) 
     at java.base/sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:288) 
     at java.base/java.nio.file.Files.move(Files.java:1413) 
     at jdk.jartool/sun.tools.jar.Main.validateAndClose(Main.java:460) 
     at jdk.jartool/sun.tools.jar.Main.run(Main.java:343) 
     at jdk.jartool/sun.tools.jar.Main.main(Main.java:1670) 

私は、これは開発環境のサービス・ファイルの存在によるものであると思います。それらをフィルタリングする可能性はありますか(特定のファイルタイプのファイルのみをjarでパッケージ化するために選択します)?


Java Platform, Standard Edition Tools Referenceで説明したjar操作。

+1

あなたは 'class'ファイルを' -C'を使う代わりに明示的にリストアップしようとしましたか?そうすれば '.netbeans ... 'フォルダを除外することができます。また、これらは警告のみなので、例外とは無関係かもしれないということも興味深い。そこには何も原因はありませんか? – Nicolai

+0

はい、@ニコライ。 'class'ファイルのリストはフィルタリングの問題を解決しました。私は '$(find -name * .class)'コマンドがこれに便利だと思います。しかし、これには他にも問題があります。ソースコードファイルのリストのどこにルートフォルダがあるかを指定する方法はありません。 –

+0

したがって、ファイルの誤ったパッキングが発生します( 'com.jdojo.mrjar.jdk9.build.classes.com.jdojo.mrjar')。 –

答えて

3

コマンドの最短全配列があります:コマンドの実行の

cd com.jdojo.mrjar.jdk8/build/classes && jar -c -f com.jdojo.mrjar.jar $(find -name *.class) && cd ../../.. && mv -f com.jdojo.mrjar.jdk8/build/classes/com.jdojo.mrjar.jar -t com.jdojo.mrjar.jdk9/build/classes && cd com.jdojo.mrjar.jdk9/build/classes && jar -u -f com.jdojo.mrjar.jar --release 9 $(find -name *.class) && cd ../../.. && mv -f com.jdojo.mrjar.jdk9/build/classes/com.jdojo.mrjar.jar -t com.jdojo.mrjar.jdk9/mrjars 

ステップバイステップの説明は

  1. com.jdojo.mrjar」に進みます。 jdk8/build/classes "フォルダ:
    cd com.jdojo.mrjar.jdk8/build/classes
  2. ここでjarコマンドを実行してください:
    jar -c -f com.jdojo.mrjar.jar $(find -name *.class)
  3. に戻っ:
    cd ../../..
  4. 移動作成したjarファイルを他のフォルダへ:mv -f com.jdojo.mrjar.jdk8/build/classes/com.jdojo.mrjar.jar -t com.jdojo.mrjar.jdk9/build/classes

  5. がこのフォルダに移動します戻って
    jar -u -f com.jdojo.mrjar.jar --release 9 $(find -name *.class)

  6. cd com.jdojo.mrjar.jdk9/build/classes
  7. 更新はjarファイルを移動し
    cd ../../..
  8. 更新されたjarファイルを移動先フォルダに移動:
    mv -f com.jdojo.mrjar.jdk9/build/classes/com.jdojo.mrjar.jar -t com.jdojo.mrjar.jdk9/mrjars

おそらく、より短い解決策が存在する可能性があります。

関連する問題