如何创建多版本 jar 和过滤输入内容?
How to create multi-release jar and filtering input content?
我想通过 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)
我认为这是由于开发环境服务文件的存在。有没有可能过滤它们(select只有某种文件类型的文件用jar打包)?
有最短的完整命令序列:
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
命令执行的分步说明
- 转到 "com.jdojo.mrjar.jdk8/build/classes" 文件夹:
cd com.jdojo.mrjar.jdk8/build/classes
- 运行 jar命令在这个地方:
jar -c -f com.jdojo.mrjar.jar $(find -name *.class)
- 返回:
cd ../../..
- 将创建的 jar 文件移动到其他文件夹:
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 文件:
jar -u -f com.jdojo.mrjar.jar --release 9 $(find -name *.class)
- 返回:
cd ../../..
- 正在将更新的 jar 文件移动到目标文件夹:
mv -f com.jdojo.mrjar.jdk9/build/classes/com.jdojo.mrjar.jar -t com.jdojo.mrjar.jdk9/mrjars
也许,可能有更短的解决方案。
我想通过 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)
我认为这是由于开发环境服务文件的存在。有没有可能过滤它们(select只有某种文件类型的文件用jar打包)?
有最短的完整命令序列:
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
命令执行的分步说明
- 转到 "com.jdojo.mrjar.jdk8/build/classes" 文件夹:
cd com.jdojo.mrjar.jdk8/build/classes
- 运行 jar命令在这个地方:
jar -c -f com.jdojo.mrjar.jar $(find -name *.class)
- 返回:
cd ../../..
- 将创建的 jar 文件移动到其他文件夹:
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 文件:
jar -u -f com.jdojo.mrjar.jar --release 9 $(find -name *.class)
- 返回:
cd ../../..
- 正在将更新的 jar 文件移动到目标文件夹:
mv -f com.jdojo.mrjar.jdk9/build/classes/com.jdojo.mrjar.jar -t com.jdojo.mrjar.jdk9/mrjars
也许,可能有更短的解决方案。