如何创建多版本jar和过滤输入内容?

时间:2017-08-04 07:24:09

标签: java netbeans jar java-9

我想通过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包装它们)?

Java Platform, Standard Edition Tools Reference中描述的jar操作。

1 个答案:

答案 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

执行命令的逐步说明

  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. 转到此文件夹:
    cd com.jdojo.mrjar.jdk9/build/classes
  6. 更新已移动的jar文件:
    jar -u -f com.jdojo.mrjar.jar --release 9 $(find -name *.class)
  7. 返回:
    cd ../../..
  8. 将更新后的jar文件移至目标文件夹:
    mv -f com.jdojo.mrjar.jdk9/build/classes/com.jdojo.mrjar.jar -t com.jdojo.mrjar.jdk9/mrjars
  9. 也许,可能会有一个较短的解决方案。