标签: java-12

错误:java:错误:无效的源发布:13将JDK12与IntelliJ一起使用

我正在尝试使用JDK-12 ea构建一个项目。尝试执行示例类时:

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int value = scanner.nextInt();
    // After JEP-325
    switch (value) {
        case 1 ->System.out.println("one");
        case 2 ->System.out.println("two");
        default ->System.out.println("many");
    }
} 
Run Code Online (Sandbox Code Playgroud)

IDE抛出读取的错误

错误:java:错误:无效的源发行版:13

相关项目配置屏幕:

在此处输入图片说明

模块设定

在此处输入图片说明

开发包

在此处输入图片说明

在此处输入图片说明

编译器设定

在此处输入图片说明 关于IDE:

IntelliJ IDEA 2018.3.3 (Community Edition)
Build #IC-183.5153.38, built on January 9, 2019
JRE: 1.8.0_152-release-1343-b26 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.13.6
Run Code Online (Sandbox Code Playgroud)

尝试将语言级别切换回12,没有实验性功能,但最终以

在此处输入图片说明

我记得最近成功使用了实验性功能(不确定确切的IntelliJ版本)。除此以外,我还需要配置一些更改吗?

java intellij-idea java-12 preview-feature

5
推荐指数
2
解决办法
4560
查看次数

使用Gradle编译为比Javac允许的Java级别低的级别

我在Java 12上大吃一惊,并注意到javac最低目标Java级别已提高到1.7。

Execution failed for task ':com.foo:compileJava'.
> error: release version 6 not supported
Run Code Online (Sandbox Code Playgroud)

为什么我要编译为您要求的Java 6?

即使我的代码库要求的最低Java级别为1.7,我仍然希望将内核以较旧的Java级别进行编译,以便JVM可以启动,并且我可以输出一条更好的错误消息,指示必须使用Java 7+,而不是更多。神秘的不兼容类版本错误。

展望未来...

Java 6并不是太大的问题,但是我主要关心的是,如果Java仅支持N-5版本,那么到Java 14(大约从现在开始),我将不再能够编译为Java 8。仍然是一个非常流行的运行时版本。

我相信Maven可以通过工具链解决此类问题,但是Gradle是否提供类似的功能?

编辑:我还注意到JEP 182尚未批准,但是如果批准将意味着仅支持N-3版本。

java gradle java-12

5
推荐指数
0
解决办法
113
查看次数

如何使用Java 12的Microbenchmark Suite?

根据JEP 230:Microbenchmark Suite,存在Java 12内置的微基准套件。JEP解释说它基本上是JMH,但无需使用Maven / Gradle明确依赖它。但是,它没有指定如何访问属于该套件的类/注释来执行基准测试。

我的问题是:

  • module-info.java要使用此套件,我是否需要一个特定的Java模块?
  • 该套件的类/注释位于什么包中?
  • 此套件与JMH之间有什么主要区别吗?

java benchmarking microbenchmark jmh java-12

5
推荐指数
1
解决办法
584
查看次数

在Docker中运行Java 12应用程序

看了一看OpenJDK Docker存储库,发现Java 12没有JRE映像。Java11(openjdk:11.0.2-jre)有一个JRE映像,但是12中只有JDK映像。

问:如何使用OpenJDK JRE 12在Docker中运行应用程序而不使用完整的JDK映像?

java docker java-12

5
推荐指数
1
解决办法
1651
查看次数

VarHandle get / setOpaque

我继续战斗,以了解VarHandle::setOpaqueVarHandle::getOpaque真正做的事情。到目前为止,这并不容易-我认为我得到了一些东西(但不会在问题本身中介绍它们,不要糊涂了它们),但总的来说,这对我来说最多是误导。

文档:

返回按程序顺序访问的变量的值...

据我了解,如果我有:

int xx = x; // read x
int yy = y; // read y
Run Code Online (Sandbox Code Playgroud)

这些读取可以重新排序。另一方面,如果我有:

// simplified code, does not compile, but reads happen on the same "this" for example
int xx = VarHandle_X.getOpaque(x); 
int yy = VarHandle_Y.getOpaque(y);
Run Code Online (Sandbox Code Playgroud)

这次不能重新订购吗?这就是“程序顺序”的意思吗?我们是否在谈论在这里插入障碍物以禁止这种重新排序?如果是这样,由于这是两个负载,是否会达到相同的效果?通过:

 int xx = x;
 VarHandle.loadLoadFence()
 int yy = y;
Run Code Online (Sandbox Code Playgroud)

但这变得更加棘手:

...但不能保证相对于其他线程的内存排序效果。

我无法拿出一个例子来假装我理解这部分。

在我看来,该文档针对的是确切知道他们在做什么的人(我绝对不是一个人)...那么有人可以在这里阐明一些信息吗?

java jvm-hotspot memory-barriers java-12

5
推荐指数
1
解决办法
135
查看次数

是否可以使用 java 12 创建 spring boot maven 项目?

我正在尝试使用 spring boot、maven 和 java 12 创建 web 应用程序。我使用 spring-boot-starter-parent 版本 2.1.5.RELEASE、java 12 和 maven-compiler-plugin 版本 3.8.1 启动了该项目。我尝试运行 ./mvnw 包,但出现此错误:

编译致命错误:无效目标版本:12

之后我在互联网上写道,maven 编译器插件使用旧的 asm 依赖项,我应该指定它的新版本。因此,我选择了最新版本的 asm,即 7.1,并添加了带有属性 release 12 和 compilerArgs --enable-preview 的配置标记,用于 Java 12。结果是:

编译致命错误:无效标志:--release

我尝试的下一件事是使用 spring boot starter 父版本 2.2.0.M3 并指定存储库以从http://repo.spring.io/milestone查找 spring 的里程碑版本。不幸的是我得到了同样的结果。有任何想法吗?

java spring maven spring-boot java-12

5
推荐指数
1
解决办法
1595
查看次数

Java模块系统:“提供”通用接口

我正在尝试Java模块系统。我正在尝试将ServiceLoader用于通用接口。它可以工作,但是我在module-info中收到警告。这是我的最小代码

module testProvideWith {
  provides ServiceGeneric with SString;
  uses ServiceGeneric;
}
public interface ServiceGeneric<T> {
  T getT();
}
public class SString implements ServiceGeneric<String>{
  public String getT() {return "Hello";}
}
Run Code Online (Sandbox Code Playgroud)

尝试时收到警告我并不感到惊讶

ServiceGeneric<String> serv=ServiceLoader.load(ServiceGeneric.class).findFirst().get();
Run Code Online (Sandbox Code Playgroud)

我知道通用擦除,我知道我必须使用注释或其他技巧来注释正确的服务。但是...我没有找到所有通用服务。我希望能够写类似

module testProvideWith {
  provides ServiceGeneric<String> with SString;
  uses ServiceGeneric<String>;
  //more cases could be added
}
...
ServiceLoader.load(ServiceGeneric.class,String.class)
Run Code Online (Sandbox Code Playgroud)

模块和加载程序在哪里协作以跟踪可用的通用版本..但是...什么都没有...没有人考虑过这种可能性...我想念什么吗?

java generics java-module java-12

5
推荐指数
1
解决办法
74
查看次数

JavaFX 12 中缺少包 javafx.embed.swing?

我从 Java 10 升级到 Java 12 和 JavaFX 12。

现在我无法再编译我的项目,因为javafx.embed.swingSwingFXUtils不再被识别。

Intellij 找不到该类的任何库。好像javafx.embed已经不存在了。

我查看了包裹是否掉落,但找不到任何相关信息。

java swing javafx java-12

5
推荐指数
1
解决办法
1878
查看次数

如何解决 Java 12 上的 JAXB 类路径问题

我正在使用 JAXB 将应用程序移植到 JDK 11/12,但在尝试修复这些 JAXB 类路径问题时完全迷失了方向。我已经用谷歌搜索并阅读了基本上与此相关的所有内容,所以我知道 Java11 中所做的更改,即从 JDK 中删除 JAXB ...但是在这种情况下,我会假设一个简单的修复,包括在类路径上添加 api 和 impl JAR。但这不起作用,尽管我在类路径上有这些 JAR,但我仍然得到已知的异常,尽管使用 2.3.2 JAXB:

javax.xml.bind.JAXBException - 带有链接异常:[java.lang.ClassNotFoundException:com.sun.xml.internal.bind.v2.ContextFactory]

即使我看到该类位于不同的包中,并且我指示通过系统变量使用正确的包,它也不起作用:

gradle -Djavax.xml.bind.context.factory=com.sun.xml.bind.v2.ContextFactory 构建

javax.xml.bind.JAXBException - 带有链接异常:[java.lang.ClassNotFoundException:com.sun.xml.bind.v2.ContextFactory]

有谁知道如何解决这个问题?我不想使用清单文件等。应该可以将正确的 JAR 放在类路径上,就是这样,或者不是?

此处总结但无法使其工作: http://www.descher.at/descher-vu/2019/01/java-11-jaxb-and-osgi/

更新,Gradle 中使用的依赖项: - jaxb-xjc 将 jaxb-runtime (实现)作为传递依赖项。我看到它是由 Gradle 选择的,但仍然是同样的错误。

classpath "com.sun.activation:javax.activation:1.2.0"
classpath "jakarta.xml.bind:jakarta.xml.bind-api:2.3.2"
classpath "org.glassfish.jaxb:jaxb-xjc:2.3.2"
classpath"org.glassfish.jaxb:jaxb-core:2.3.0.1"
Run Code Online (Sandbox Code Playgroud)

[org.gradle.internal.operations.DefaultBuildOperationExecutor] 构建操作“解析 jaxb-runtime.jar (org.glassfish.jaxb:jaxb-runtime:2.3.2)”已完成

[org.gradle.internal.component.model.ComponentAttributeMatcher] 从候选者中选择匹配 org.glassfish.jaxb:jaxb-runtime:2.3.2 配置运行时 [org.glassfish.jaxb:jaxb-runtime:2.3.2 配置运行时] {org.gradle.dependency.bundling=外部,org.gradle.jvm.version=12,org.gradle.usage=java-runtime}

这是“gradle dependency”的输出,所有 JAXB jar 都在那里,但仍然抛出类路径错误。Glassfish 的 JAR 文件 jaxb-runtime 肯定有这个 ContextFactory 类。

runtimeClasspath - Runtime classpath of source …
Run Code Online (Sandbox Code Playgroud)

jaxb gradle java-11 java-12

5
推荐指数
1
解决办法
6584
查看次数

Java 12 上的 Apache Axis 1.4

我目前正在尝试从 Java 8 项目迁移到 Java 12。(希望如此)最后一个障碍是我们被迫使用的旧 WebService。在 Java 8 中“按原样”使用 WebService 本身不是问题,它已经工作了很多年。

wsdl 指出:

<!--由Apache Axis 创建的WSDL 版本:1.4

建立于 2006 年 4 月 22 日 -->

据我所知,新版本的 WSDL2JAVA 不再支持这种类型的服务(因为它们依赖于 Axis 2):

WSDLToJava 错误:CXF 不支持 Rpc/编码的 wsdls

为了使此服务可用(使用 Java 812),我需要以下库:

<!-- https://mvnrepository.com/artifact/javax.xml.rpc/javax.xml.rpc-api -->
<dependency>
    <groupId>javax.xml.rpc</groupId>
    <artifactId>javax.xml.rpc-api</artifactId>
    <version>1.1.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

这就是问题发生的地方。该库定义了部分包javax.xml,由于它是 Java 系统路径,因此不再允许使用。任何建议或解决方法?我忽略了什么吗?

编辑: ZhekaKozlov 关于不得不切换到雅加达是正确的。现在还剩下一个错误,因为Axis2,项目中也是需要的。

<!-- https://mvnrepository.com/artifact/org.apache.axis2/axis2-kernel -->
<dependency>
    <groupId>org.apache.axis2</groupId>
    <artifactId>axis2-kernel</artifactId>
    <version>1.7.9</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

将它添加到一个新的 Java 12 项目会使org.w3c.dom.*(例如 Document)无法使用。

EDIT2:我终于让一切正常。程序正在运行,代码中没有错误。不幸的是,我无法测试应用程序的 Axis 部分,因为它所连接的服务只能在我们客户端的环境中使用,因此必须对其进行测试。在axis2和axis2-adb上,我不得不排除两个库:

<exclusions>
    <exclusion>
        <groupId>org.apache.geronimo.specs</groupId> …
Run Code Online (Sandbox Code Playgroud)

java axis jax-rpc javax.xml java-12

5
推荐指数
1
解决办法
1769
查看次数