How to create multi-release jar and filtering input content?

空扰寡人 提交于 2019-12-07 10:14:08

问题


I would like to create multi-release jar (for Java 8 and Java 9) by jar command. There are several Netbeans IDE projects: com.jdojo.mrjar.jdk8, com.jdojo.mrjar.jdk9. Projects source code is here. Using command line I go to a parent folder and run command. When I try to do this:

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

I get a message:

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)

I think this is due to the presence of the development environment service files. Is there any possibility of filtering them (select only the files of a certain file type for packing them by jar)?


The jar operations described in Java Platform, Standard Edition Tools Reference.


回答1:


There is the shortest full sequence of commands:

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

Step-by-step description of the execution of commands

  1. go to "com.jdojo.mrjar.jdk8/build/classes" folder:
    cd com.jdojo.mrjar.jdk8/build/classes
  2. run jar command in this place:
    jar -c -f com.jdojo.mrjar.jar $(find -name *.class)
  3. go back:
    cd ../../..
  4. move created jar file to an other folder:
    mv -f com.jdojo.mrjar.jdk8/build/classes/com.jdojo.mrjar.jar -t com.jdojo.mrjar.jdk9/build/classes
  5. go to this folder:
    cd com.jdojo.mrjar.jdk9/build/classes
  6. updating moved jar file:
    jar -u -f com.jdojo.mrjar.jar --release 9 $(find -name *.class)
  7. go back:
    cd ../../..
  8. moving updated jar file to destination folder:
    mv -f com.jdojo.mrjar.jdk9/build/classes/com.jdojo.mrjar.jar -t com.jdojo.mrjar.jdk9/mrjars

Perhaps, there may be a shorter solution.



来源:https://stackoverflow.com/questions/45500592/how-to-create-multi-release-jar-and-filtering-input-content

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!