如何为Java 11构建GraalVM JVM?
(I don't see any official distributives only java 8)
我想使用JEP 330来运行带有Java(> = 11)的单文件源代码程序.
这样做,我想传递编译器(javac)理解的选项,但不传递运行时(java),例如-XDsuppressNotes.这会导致以下调用失败:
java --enable-preview --source=12 -XDsuppressNotes Test.java
Unrecognized option: -XDsuppressNotes
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如何指定此类特定于编译器的选项?
我有一个现有的Spring boot应用程序,我建立gradle.这些天我一直在使用JDK / JRE 8,现在我正在尝试使用JDK-11
因此,要检查兼容性,我设置JAVA_HOME到JDK-11,但试图编译Java 8模式
我在下面添加了以下块 build.gradle
compileJava {
targetCompatibility = '1.8'
}
Run Code Online (Sandbox Code Playgroud)
然后我JAVA_HOME明确地设置set JAVA_HOME=C:\Users\arun\Desktop\jdk-11.0.1
然后执行 gradlew clean build
但是我因以下例外而停止了
> Configure project :
Build Version = build-182-ga03cf6c
> Task :compileJava FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':compileJava'.
> warning: source release 11 requires target release 11
Run Code Online (Sandbox Code Playgroud)
如何指向我JAVA_HOME来JDK-11,但仍然在执行它Java-8 …
我在这里下载了Eclipse IDE for Java EE Developers:https: //www.eclipse.org/downloads/packages/release/oxygen/2/eclipse-ide-java-ee-developers
我在这里下载了OpenJDK版本11:http :
//jdk.java.net/11/
我将环境变量JAVA_HOME设置为java目录,将PATH设置为java可执行文件.
在这两种情况下,我都下载了64位Windows版本.
我的操作系统是Windows 10.
我的eclipse.ini:
-startup
plugins/org.eclipse.equinox.launcher_1.4.0.v20161219-1356.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.551.v20171108-1834
-product
org.eclipse.epp.package.jee.product
-showsplash
org.eclipse.epp.package.common
--launcher.defaultAction
openFile
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vm
C:\Program Files\Java\bin\javaw.exe
-vmargs
-Dosgi.requiredJavaVersion=1.8
-Dosgi.instance.area.default=@user.home/eclipse-workspace
-XX:MaxPermSize=256m
-XX:+UseG1GC
-XX:+UseStringDeduplication
--add-modules=ALL-SYSTEM
-Dosgi.requiredJavaVersion=1.8
-Xms256m
-Xmx1024m
--add-modules=ALL-SYSTEM
Run Code Online (Sandbox Code Playgroud)
我的.log文件中的错误转储:
!SESSION 2019-01-11 19:00:25.148 -----------------------------------------------
eclipse.buildId=4.7.2.M20171130-0510
java.version=11.0.1
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=de_DE
Framework arguments: -product org.eclipse.epp.package.jee.product
Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product
!ENTRY org.eclipse.osgi 4 0 2019-01-11 …Run Code Online (Sandbox Code Playgroud) 背景:
在我的组织中,有很多基于Java的Windows桌面应用程序。在我们专有的软件部署系统中,应用程序不包含单独的JRE / JDK。而是将通用的JRE(到目前为止,Oracle 8 Java SE JRE)部署到用户计算机,该计算机根据环境变量附加到各个应用程序。
我们希望将JRE从Oracle 8 Java SE JRE迁移到OpenJDK 11,而无需修改应用程序。从Java 8到Java 11删除了各种库,例如JavaFX。使用Java模块系统和jlink工具,我可以创建自己的专有JDK(通过OpenJFX增强):
jlink --module-path ..\mods;C:\Temp\javafx-jmods-11.0.2 --add-modules=ALL-MODULE-PATH,java.base,java.compiler,java.datatransfer,java.desktop,... --output C:\Temp\OpenJDK+OpenJFX
Run Code Online (Sandbox Code Playgroud)
需要JavaFX的应用程序可以使用此专有JDK,而无需进行更改。
当我尝试将相同的方法应用于最新的JAXB beta时,出现以下错误:
jlink --module-path ..\mods;C:\Temp\jaxb-ri-2.4.0-b180830.0438\jaxb-ri\mod --add-modules=java.xml.bind,java.base,java.compiler,java.datatransfer,java.desktop,java.instrument,... --output C:\Workspace\Java\OpenJDK_11.0.2_JFX_JAXB
Error: automatic module cannot be used with jlink: java.activation from file:///C:/Temp/jaxb-ri-2.4.0-b180830.0438/jaxb-ri/mod/javax.activation-api.jar
Run Code Online (Sandbox Code Playgroud)
根据https://github.com/eclipse-ee4j/jaf/issues/13,“ JAXB API使用Activation-api作为其依赖项,由于缺少module-info而被迫将其用作自动模块或从类路径中使用.java描述符文件。 ”
此外,是否可以在JDK 11上使用jlink来创建包含已删除的Java SE EE模块的运行时?我可以使用Java 10中的jlink捆绑模块java.xml.bind,该模块仍包含该模块。如果我将OpenJDK 10.0.2中的两个模块添加到模块路径,则jlink确实成功:
jlink --module-path ..\mods;C:\Temp\jdk-10.0.2\jmods\java.xml.bind.jmod;C:\Temp\jdk-10.0.2\jmods\java.activation.jmod --add-modules=java.xml.bind, ...
Run Code Online (Sandbox Code Playgroud)
但是,当我使用生成的JDK运行应用程序时,出现如下错误:
!ENTRY org.eclipse.osgi 4 0 2019-02-15 15:58:58.642
!MESSAGE Application error
!STACK 1
org.eclipse.e4.core.di.InjectionException: java.lang.NoClassDefFoundError: javax/annotation/PostConstruct
at …Run Code Online (Sandbox Code Playgroud) 我有一个对特定端点发出POST请求的代码。这段代码是使用Apache的HttpClient,我想开始使用HttpClientJava(JDK11)的本机代码。但是我不明白如何指定请求的参数。
这是我使用Apache Httpclient的代码:
var path = Path.of("file.txt");
var entity = MultipartEntityBuilder.create()
.addPart("file", new FileBody(path.toFile()))
.addTextBody("token", "<any-token>")
.build();
Run Code Online (Sandbox Code Playgroud)
和代码使用HttpClient:
var client = HttpClient.newHttpClient();
var request = HttpRequest.newBuilder()
.uri(URI.create("https://myendpoint.com/"))
.POST( /* How can I set the parameters here? */ );
Run Code Online (Sandbox Code Playgroud)
如何设置file和token参数?
Gradle Build 失败并出现以下异常(添加 --stacktrace)
FAILURE: Build failed with an exception.
* What went wrong:
Could not create an instance of type org.gradle.invocation.DefaultGradle.
> Could not configure services using GradleScopeCompileServices.configure().
* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Exception is:
org.gradle.api.reflect.ObjectInstantiationException: Could not create an instance of type org.gradle.invocation.DefaultGradle.
at org.gradle.internal.instantiation.DependencyInjectingInstantiator.newInstance(DependencyInjectingInstantiator.java:54)
at org.gradle.initialization.DefaultGradleLauncherFactory.doNewInstance(DefaultGradleLauncherFactory.java:133)
at org.gradle.initialization.DefaultGradleLauncherFactory.newInstance(DefaultGradleLauncherFactory.java:79)
at org.gradle.composite.internal.DefaultRootBuildState.<init>(DefaultRootBuildState.java:45)
at org.gradle.composite.internal.DefaultIncludedBuildRegistry.createRootBuild(DefaultIncludedBuildRegistry.java:85)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:46)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:31)
at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:42)
at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:28)
at …Run Code Online (Sandbox Code Playgroud) Java 11 向Pattern类(正则表达式的编译版本)添加了一些新方法,包括:
我想了解两者之间的区别以及何时想使用其中一种而不是另一种?
java.sql.SQLRecoverableException: IO Error: The service in process is not supported. Operation unavailable (Mechanism level: KRB_CRED not generated correctly.)
Run Code Online (Sandbox Code Playgroud)
当我尝试使用身份验证方式HikariDataSource与数据库建立连接时,我收到此异常。oraclekerberos
我确信这个问题与我的原则不被接受有关,尽管我的凭证缓存文件对于我的其他java 8项目来说工作得很好。
我认为主体存在问题的原因是因为我在服务器上生成了一个单独的凭据缓存文件,该文件使用的主体与我在本地使用的主体不同。当我的服务器中的凭证缓存文件在本地用于该java 11项目时,它工作得非常好。但是,我无法使用该主体在本地生成凭据缓存文件。
此外,我使用相同的krb5.conf文件,所以我不明白我的主体如何被 1 个服务接受,但不是另一个服务......我还确保在执行以下命令时使用java 11该文件的版本,尽管我不知道kinit.exe我认为这并不重要。
$kinit -c credential_cache_file instance@domain.realm
Run Code Online (Sandbox Code Playgroud)
使用其他标志(例如)-A -p -f也会给我一个单独的错误,但是这种类型的凭据缓存文件不适用于我的任何java 8或java 11服务。
java.nio.BufferOverflowException: null
Run Code Online (Sandbox Code Playgroud)
编辑:我实际上得到的最低级别的错误是这样的。
Caused by: sun.security.krb5.KrbException: Invalid option in ticket request. (101)
Run Code Online (Sandbox Code Playgroud) 从 Gradle 6.7.1 升级到 Gradle 7.4 后,出现以下错误:
FAILURE: Build failed with an exception.
* What went wrong:
Could not determine the dependencies of task ':example-project:compileJava'.
> Failed to query the value of extension 'example-extension' property 'enabled'.
> Failed to calculate the value of task ':example-project:compileJava' property 'javaCompiler'.
> No compatible toolchains found for request filter: {languageVersion=11, vendor=any, implementation=vendor-specific} (auto-detect true, auto-download false)
Run Code Online (Sandbox Code Playgroud)