我想通过jar
命令创建多版本jar(用于Java 8和Java 9)。
有几个Netbeans IDE项目:com.jdojo.mrjar.jdk8,com.jdojo.mrjar.jdk9。
项目源代码为here。
使用命令行我转到父文件夹并运行命令。
当我尝试这样做时:
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包装它们)?
答案 0 :(得分: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
执行命令的逐步说明
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
也许,可能会有一个较短的解决方案。