我正在阅读 Java 10 中发布的新功能,我发现了这一点:
Java 10
var
作为保留类型名称引入以减少冗长。它可以用作变量、方法和包名,但我们不能将其用作类或接口名。
是否var
类似于var
JavaScript 中的关键字?Javavar
和 JavaScript之间究竟有何异同var
?
由于JDK8 Oracle
宣布不再支持,我需要将当前升级JDK
到JDK10
.
经过研究,目前hibernate
还需要从 升级hibernate 4
到hibernate 5
,才能运行在JDK 10.
但是,有一些hibernate相关的库,我是否也应该升级,如果是,哪个版本适合?这是我当前的摘录pom.xml
:
<properties>
<hibernate.version>4.3.11.Final</hibernate.version>
<java-version>1.7</java-version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- hibernate -->
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.1.2.Final</version>
</dependency>
Run Code Online (Sandbox Code Playgroud) 一般来说,我知道Java中的工作类型推断.但是我很好奇当你使用JDK 10新功能var时它在循环中是如何工作的 .
我的意思是我可以用这种方式编写循环
for(var i=0; i<100; i++) {
//something to do
}
Run Code Online (Sandbox Code Playgroud)
编译器如何推断应该有一个int而不是long?
我切换到ubuntu 18.04.其中java 10默认为jvm
现在我使用javafx的应用程序无法再编译了.
cannot find symbol
[ERROR] symbol: class ObservableMap
Run Code Online (Sandbox Code Playgroud)
我尝试将参数添加到maven-compiler-plugin以加载javafx.graphics模块.
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerArgs>
<arg>--add-modules</arg>
<arg>javafx.graphics</arg>
</compilerArgs>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
结果:
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] module not found: javafx.graphics
Run Code Online (Sandbox Code Playgroud)
当然,java --list-modules | grep fx什么都不返回.
我花了10多个小时试图解决这个问题.
TL:DR我应该怎么做用Java 10编译我的JavaFX模块?
最小项目:
/pom.xml
<project>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<name>java10fx</name>
<artifactId>java10fx</artifactId>
<version>0.0.1</version>
<groupId>my.test</groupId>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<release>10</release>
</configuration>
</plugin>
</plugins>
</build>
</project>
Run Code Online (Sandbox Code Playgroud)
/src/main/java/MyApp.java
import javafx.application.Application;
import javafx.stage.Stage;
public class MyApp extends Application{
public static void main(String[] args) {
launch(args);
} …
Run Code Online (Sandbox Code Playgroud) 我使用 eclipselink 2.6.5 的一些 EJB 实体作为 Rest 服务(TomEE 服务器中的 Jersy)。
\n\n使用jdk-1.8它工作得很好,但是使用新的jdk-10.0现在我在搜索持久性时遇到了NullPointerException。
\n\n我的 JPA 环境是否存在错误或不匹配?
\n\n谢谢
\n\n史蒂芬
\n\nException in thread "main" Local Exception Stack: \nException [EclipseLink-30005] (Eclipse Persistence Services - 2.6.5.v20170607-b3d05bd): org.eclipse.persistence.exceptions.PersistenceUnitLoadingException\n Exception Description: An exception was thrown while searching for persistence archives with ClassLoader: jdk.internal.loader.ClassLoaders$AppClassLoader@41906a77\n Internal Exception: java.lang.NullPointerException\n at org.eclipse.persistence.exceptions.PersistenceUnitLoadingException.exceptionSearchingForPersistenceResources(PersistenceUnitLoadingException.java:127)\n at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactoryImpl(PersistenceProvider.java:115)\n at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:188)\n at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79)\n at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)\n at de.company.test.simulation.session.MySimulationService.<init>(MySimulationService.java:50)\n at de.company.test.simulation.controller.MyController.<init>(MyController.java:81)\n at de.company.test.simulation.MySimulationLauncher.main(MySimulationLauncher.java:156)\n Caused by: java.lang.NullPointerException\n at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.predeploy(EntityManagerSetupImpl.java:2030)\n at org.eclipse.persistence.internal.jpa.deployment.JPAInitializer.callPredeploy(JPAInitializer.java:100)\n at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactoryImpl(PersistenceProvider.java:104)\n
Run Code Online (Sandbox Code Playgroud)\n\n我的坚持.xml …
Java 10引入了本地类型推理,这非常酷:
var list = new ArrayList<String>(); // Compiles fine
Run Code Online (Sandbox Code Playgroud)
但是,似乎人们不愿意在新版本发布的那一天(周,月,年)更新他们的Java版本.
这意味着我需要等到Java 8的EOL才可以使用,List.of(1, 2, 3)
如果想要支持使用旧Java版本的大多数用户.
另一方面,当编译为字节码时,可能会推断出本地类型推断,因此可能使用它的程序可能会在较旧的Java版本(9或8)上运行.另一方面,Java似乎喜欢在运行时进行优化,这可能意味着类型推断需要JRE版本10.
有人试过这个吗?使用类型推断的程序是否在较旧的Java版本上运行?
感谢您的意见.
我正在尝试从源代码构建Elasticsearch.我今天从GitHub回购克隆,我按照" 从源头构建 "中的说明进行操作.
运行./gradlew assemble
会产生以下错误:
...
> Configure project :benchmarks
=======================================
Elasticsearch Build Hamster says Hello!
=======================================
Gradle Version : 4.7
OS Info : Linux 4.4.0-112-generic (amd64)
JDK Version : Oracle Corporation 1.8.0_161 [Java HotSpot(TM) 64-Bit Server VM 25.161-b12]
JAVA_HOME : /usr/lib/jvm/java-8-oracle
Random Testing Seed : 5554B47DBBCF3CFB
Project evaluation failed including an error in afterEvaluate {}. Run with --stacktrace for details of the afterEvaluate {} error.
FAILURE: Build failed with an exception.
* Where:
Build file …
Run Code Online (Sandbox Code Playgroud) 我已经成功安装了带有 JDK 10 的 netbeans(Apache 版本),但是var
在我的项目中无法使用关键字,它一直说cannot find symbol
. 任何帮助,将不胜感激。
我对 Java 编程比较陌生,我现在正在上的课程向我介绍 MySQL。我使用的是 JDK 10.0.2,我的课程有 JDK 1.7 或 1.8 的说明。我刚刚下载了 MySQL 连接器文件,将其解压缩,并将“mysql-connector-java-8.0.12.jar”文件放在桌面上的临时文件夹中。我的老师希望我将所述文件复制到“JAVA_HOME\jre\lib\ext”。不过,我通过这里了解到,从 JDK 9 及更高版本开始,他们已经删除了扩展机制,我应该使用此连接器为每个项目创建一个单独的类路径。在此阶段,我尝试将 java.sql.* 导入到我的 eclipse 项目中,但收到“The import java.sql无法解析”错误。
如何在项目中使用 JDK 10.0.2 正确设置 .jar 文件及其类路径,以便导入 java.sql.* 并继续?
作为旁注,我对“Maven”了解不多,但我试图在不涉及“Maven”的情况下手动执行此操作。我再次使用 Eclipse 作为 IDE。