2

如果我运行命令jar --create --release 9 -C com.java.mrjar.nine\build\classes .我有错误

entry: META-INF/versions/9/com/java/mrjar/nine/Main.class, contains a new public class not found in base entries
entry: META-INF/versions/9/com/java/mrjar/nine/TimeUt.class, contains a new public class not found in base entries
invalid multi-release jar file mrjars\com.java.mrjar.jar deleted

这些是 Main 和 TimeUt 类:

package com.java.mrjar.nine;
import java.time.Instant;
public class Main {
    public static void main(String[] args) {
        System.out.println("Inside jdk9 Main.main()...");
        TimeUt t = new TimeUt();
        System.out.println("Local Date: "+t.getLocalDate(Instant.now()));
    }
}

package com.java.mrjar.nine;
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
public class TimeUt {
    public TimeUt() {
        System.out.println("creating jdk9 version of TimeUt");
    }
    public LocalDate getLocalDate(Instant now){
        return LocalDate.ofInstant(now, ZoneId.systemDefault());
    }
}

我可以在不添加--release 9的情况下正常创建jar,但它是一个普通的 jar,它没有version>9数据。

4

1 回答 1

4

问题中的jar命令试图在基本部分中创建没有任何类的 MR JAR,而是尝试将所有类(包括公共/API 类)放在版本化部分中。如果您只是想创建一个 JAR 文件,请删除该--release选项。如果你真的想创建一个 MR JAR,那么你应该把 public/API 类放在基础部分,然后把 9 个特定的类放在版本部分。JEP 238 包含有关此帮助的所有详细信息,jar --help输出也有一些示例。

于 2017-09-12T11:04:20.717 回答