标签: java-9

如何全局设置 jdk.attach.allowAttachSelf=true

我正在尝试将我们的一个系统从 java 8 移动到 java 9,并且大约三分之一在 java 8 中正常工作的单元测试失败并出现以下错误:

java.io.IOException: Can not attach to current VM
Run Code Online (Sandbox Code Playgroud)

Google 带我看了几页,我很快就明白在 Java 9 中,默认行为已更改,以防止附加到当前 VM 并返回到您需要将系统属性设置jdk.attach.allowAttachSelf为 true的旧方式。

在 IntelliJ 中设置时,测试工作正常。更改 build.gradle 以包含此内容时,同样有效:

test {
    jvmArgs '-Djdk.attach.allowAttachSelf=true'
}
Run Code Online (Sandbox Code Playgroud)

但是,我更喜欢全局设置此设置,因此我不需要破解我的 build.gradle 和 IntelliJ。

我在 ubuntu 上运行 java 9 并更改/etc/profile.d/jdk.sh为包含以下内容:

export JDK_JAVA_OPTIONS="-Djdk.attach.allowAttachSelf=true"
Run Code Online (Sandbox Code Playgroud)

当运行我的 Gradle 构建时,我可以看到设置被拾取,因为我在构建输出中低于:

NOTE: Picked up JDK_JAVA_OPTIONS: -Djdk.attach.allowAttachSelf=true
Run Code Online (Sandbox Code Playgroud)

但是,测试不断失败,并出现相同的 IOException。

那么我做错了什么,我该如何解决?

预先感谢您的意见。

java java-9

19
推荐指数
1
解决办法
4419
查看次数

18
推荐指数
1
解决办法
1231
查看次数

Eclipse Oxygen生成toString生成不起作用

在我配置Eclipse Oxygen以使用Java 9之后,当我转到Source => Generate时,toString()我收到以下错误消息:

无法创建方法实现.
原因:模块:java.base不在其项目的构建路径上

生成constructor,getter和setter,hashcode()并且equals()工作正常,只有toString()不起作用.

如果我toString()手动输入方法,它可以正常工作.此外,如果我使用JRE 8创建项目,生成toString()工作正常.任何想法如何解决它?

java eclipse tostring java-9 eclipse-oxygen

18
推荐指数
1
解决办法
7446
查看次数

需求和模块声明中需要静态之间的区别是什么

需求需要模块声明中的静态模块语句有什么区别?

例如:

module bar {
    requires java.compiler;
    requires static java.base;
}
Run Code Online (Sandbox Code Playgroud)

java java-9 java-module module-info

18
推荐指数
2
解决办法
1931
查看次数

使用Jlink在一个平台上为另一个平台创建Java运行时映像

我在Linux机器上使用jlink创建了运行时映像.我linuxinclude文件夹下看到了文件夹.这是否意味着我只能将此运行时映像用于Linux平台?如果是,有没有办法在一个平台上为另一个平台创建运行时映像(例如在Linux for Windows上,反之亦然)

java jlink java-platform-module-system java-9 java-module

18
推荐指数
2
解决办法
3112
查看次数

"java.lang.NoSuchFieldError:super"异常 - 编译器中的错误?

用Java编写的-9是运行下面的代码给了我一个非常奇怪和有趣的异常运行时:

Exception in thread "main" java.lang.NoSuchFieldError: super
    at A$C.test(A.java:15)
    at A.main(A.java:5)
Run Code Online (Sandbox Code Playgroud)

代码:

public class A {
    public static void main(String[] args) {
        new C().test();
    }

    interface B {
        private void test() {
        }
    }

    static class C implements B {
        void test() {
            B.super.test();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想知道:它是这样设计的,还是理想情况下这个代码不应该被编译,因此这是一个编译器错误?(我个人认为这是一个错误).

UPD:提交了一个错误,ID:9052188

UPD-2:它看起来B.super.test()通常是一个有效的结构,因为如果test()方法default比它工作正常.这个事实让事情变得更加复杂.

java javac nosuchfieldexception java-9

18
推荐指数
1
解决办法
557
查看次数

切换到Java 9时,带有Spring Boot的javax.xml.bind.JAXBException的ClassNotFoundException

使用start.spring.io初始化项目

添加了WEB,JPA,H2依赖项,然后尝试运行MainApplication.java使用Jdk 9并获得以下错误日志

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::       (v1.5.10.RELEASE)

2018-02-26 16:23:33.973  INFO …
Run Code Online (Sandbox Code Playgroud)

java spring spring-boot java-9

18
推荐指数
2
解决办法
4万
查看次数

霓虹灯:如何在jdk9上运行?

刚刚开始玩jdk9 - 并且刚刚开始时卡住了:

  • 下载并解压缩eclipse-java-neon-m4a-win32
  • 安装java 9支持(来自市场的dnd )
  • 下载并安装了jdk9u99(只有jdk,而不是公共jre)

此时,我可以使用jre/jdk(在eclipse.ini中使用/ out vm参数)在我的默认java(8u60)上运行eclipse并使用java 9支持.

下一步,我想用java 9运行eclipse:将vm-arg添加到eclipse.ini,现在eclipse使用冗长的错误日志中止其启动(ini和log都显示在下面).

哪里出了问题?

我的ini:

-startup
plugins/org.eclipse.equinox.launcher_1.3.200.v20151021-1308.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.300.v20151013-1129
-product
org.eclipse.epp.package.java.product
--launcher.defaultAction
openFile
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vm
d:\java\jdk\190_ea\bin\javaw.exe
-vmargs
-Dosgi.requiredJavaVersion=1.8
-Xms256m
-Xmx1024m
Run Code Online (Sandbox Code Playgroud)

错误日志的顶部(它> 900k)

!SESSION 2016-01-22 14:31:55.974 -----------------------------------------------
eclipse.buildId=4.6.0.I20151209-2300
java.version=9-ea
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=de_DE
Framework arguments:  -product org.eclipse.epp.package.java.product
Command-line arguments:  -os win32 -ws win32 -arch x86 -product org.eclipse.epp.package.java.product

!ENTRY org.eclipse.equinox.common 4 0 2016-01-22 14:31:57.113
!MESSAGE FrameworkEvent ERROR
!STACK 0 …
Run Code Online (Sandbox Code Playgroud)

eclipse java-9 eclipse-neon

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

是否可以在Java 9中注释lambda表达式?

这个问题现在已经超过3年了,并且专门针对Java 8,接受的答案也引用了Java SE 8最终规范.

如果在Java 9中有关于这个问题的内容会发生变化,我会感兴趣:有没有办法注释类似于注释相应匿名类的lambda表达式?


例:

注解:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE_USE)
public @interface MyTypeAnnotation {
    public String value();
}
Run Code Online (Sandbox Code Playgroud)

匿名类的工作注释:

Consumer<String> consumer = new @MyTypeAnnotation("Hello ") Consumer<String>() {
    @Override
    public void accept(String str) {
        System.out.println(str);
    }
};
Run Code Online (Sandbox Code Playgroud)

注释lamba表达式,目前在Java 8中不起作用:

Consumer<String> myAnnotatedConsumer = @MyTypeAnnotation("Hello") (p -> System.out.println(p));
Run Code Online (Sandbox Code Playgroud)

java lambda annotations java-9

17
推荐指数
3
解决办法
1319
查看次数

Map.of()与Collections.emptyMap()

Map.of()Collections.emptyMap()之间List.of(),Collections.emptyList()和之间Set.of()和之间是否存在差异Collections.emptySet()

java collections java-9

17
推荐指数
1
解决办法
1199
查看次数