如何创建多版本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。
项目源代码为此处。
使用命令行我转到父文件夹并运行命令。
当我尝试这样做时:
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 .
我收到一条消息:
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包装它们)?
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)?
推荐答案
有最短的完整命令序列:
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 $(找-name * .class)
- 返回:
cd ../../ ..
- 将更新的jar文件移动到目的地文件夹:
mv -f com.jdojo.mrjar.jdk9 / build / classes / com.jdojo.mrjar.jar -t com.jdojo.mrjar.jdk9 / mrjars
- go to "com.jdojo.mrjar.jdk8/build/classes" folder:
cd com.jdojo.mrjar.jdk8/build/classes
- run jar command in this place:
jar -c -f com.jdojo.mrjar.jar $(find -name *.class)
- go back:
cd ../../..
- 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
- go to this folder:
cd com.jdojo.mrjar.jdk9/build/classes
- updating moved jar file:
jar -u -f com.jdojo.mrjar.jar --release 9 $(find -name *.class)
- go back:
cd ../../..
- 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.
这篇关于如何创建多版本jar和过滤输入内容?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!