标签: java-11

Java 11:通过Shebang执行源文件不起作用

我想看看两天前发布的java 11的一些新功能. JEP 330声明我可以在不编译的情况下启动Java-Source-Code-Program.它还应该支持Shebang-Files的使用.

因此我写了这个小的Hello-World程序Test.java:

#!/opt/java/jdk-11/bin/java --source 11

public class Test
{
    public static void main(String[] args)
    {
        System.out.println("Hello World!");
    }
}
Run Code Online (Sandbox Code Playgroud)

下载了JDK 11并将其解压缩到/opt/java.因此,Shebang本身正在发挥作用.即执行/opt/java/jdk-11/bin/java --version给了我

openjdk 11 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)
Run Code Online (Sandbox Code Playgroud)

在进行Test.java可执行(使用chmod +x Test.java)后,执行失败.即./Test.java我给了我:

./Test.java:1: error: illegal character: '#'
#!/opt/java/jdk-11/bin/java --source 11
^
./Test.java:1: error: class, interface, or enum expected
#!/opt/java/jdk-11/bin/java --source 11 …
Run Code Online (Sandbox Code Playgroud)

java shebang java-11

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

Groovy JDK 11 disable the WARNING message

When I run groovy 2.5.3 on JDK 11 its giving warning message. Is there an option to disable this warning message?

groovy -e 'print "hi"'
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.codehaus.groovy.vmplugin.v7.Java7$1 (file:/home/user/.sdkman/candidates/groovy/current/lib/groovy-2.5.3.jar) to constructor java.lang.invoke.MethodHandles$Lookup(java.lang.Class,int)
WARNING: Please consider reporting this to the maintainers of org.codehaus.groovy.vmplugin.v7.Java7$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Run Code Online (Sandbox Code Playgroud)

Thanks

groovy java-11

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

远程调试:在端口8787上未连接OpenJDK 11上的Wildfly 14

我正在尝试将调试器连接到在Open JDK 11上运行的Wildlfy。

尽管Wildfly说:

Listening for transport dt_socket at address: 8787

我的IDE(IntelliJ IDEA CE 2018.1)声称没有任何连接:

Unable to open debugger port (localhost:8787): java.io.IOException "handshake failed - connection prematurally closed"

我通过standalone.sh --debug以下方式启动Wildfly JAVA_OPTS

-server
-Xms64m
-Xmx512m
-XX:MetaspaceSize=96M
-XX:MaxMetaspaceSize=256m
-Djava.net.preferIPv4Stack=true
-Djboss.modules.system.pkgs=org.jboss.byteman
-Djava.awt.headless=true
-agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n
--add-exports=java.base/sun.nio.ch=ALL-UNNAMED
--add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED
--add-exports=jdk.unsupported/sun.reflect=ALL-UNNAMED
--add-modules=java.se
Run Code Online (Sandbox Code Playgroud)

Java 9/10/11有什么变化吗?使用Oracle JDK 8时,使用完全相同的设置进行远程调试可以很好地工作。

我可以使用telnet确认该端口8787确实无法访问。

阅读@ehsavoie的评论后进行更新netstat -ln在运行Wildfly的服务器上显示:

Proto Recv-Q Send-Q Local Address           Foreign Address         State   
tcp        0      0 127.0.0.1:8787          0.0.0.0:*               LISTEN 
Run Code Online (Sandbox Code Playgroud)

因此,显然在OpenJDK 11中,默认情况下,调试端口现已绑定到localhost。

java debugging remote-debugging wildfly java-11

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

任务:react-native-gradle-plugin:compileKotlin失败,“compileJava”任务(当前目标是1.8)和“compileKotlin”任务(当前目标是11)

info Running jetifier to migrate libraries to AndroidX. You can disable it using "--no-jetifier" flag.
Jetifier found 936 file(s) to forward-jetify. Using 12 workers...
info JS server already running.
info Installing the app...

> Task :react-native-gradle-plugin:compileKotlin FAILED
'compileJava' task (current target is 1.8) and 'compileKotlin' task (current target is 11) jvm target compatibility should be set to the same Java version.
1 actionable task: 1 executed

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task …
Run Code Online (Sandbox Code Playgroud)

java android gradle react-native java-11

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

OpenJDK JDK11没有JMC-Java Mission Controller- FlightRecorder

我希望JMC能够与OpenJDK,JDK11二进制文件一起使用,因为它已经由Oracle 11从Java 11开源,但无法在Oracle文件夹中找到Oracle和AdoptOpenJDK Java-11二进制文件.我也试过这个https://jdk.java.net/jmc/,因为有些文章说它是单独发布的.有谁知道如何获得OpenJDK-11的JMC.

java jmc java-11

16
推荐指数
3
解决办法
7048
查看次数

在Intellij IDEA中变量提取到var

在使用Java 11在Intellij IDEA中提取变量(ctrl + alt + v)时,我希望默认情况下将其提取为a var而不是详细类型.

var home = "127.0.0.1";
Run Code Online (Sandbox Code Playgroud)

代替

String home = "127.0.0.1";
Run Code Online (Sandbox Code Playgroud)

有没有办法配置Intellij IDEA来做到这一点?

java intellij-idea java-11

16
推荐指数
2
解决办法
259
查看次数

java 11 HttpClient导致无休止的SSL循环

我使用的是 java.net.http.HttpClientsendAsync方法.该HttpClient是Singelton内创建一次像这样: HttpClient.newBuilder().build()所以真的没什么特别的.

这些请求可以是POST,GET但我不知道是哪个引起了麻烦.

每天只有几个请求,但有时一个线程使用100%的cpu核心.并不是迫在眉睫,而是在请求完成一段时间后.

所以我做了一个线程转储,甚至有两个无限循环发生,以下2个线程突出:

"HttpClient-4-Worker-5" #144 daemon prio=5 os_prio=0 cpu=511298.10ms elapsed=520.71s tid=0x00007f684403e800 nid=0x2d6b runnable  [0x00007f68ac162000]
   java.lang.Thread.State: RUNNABLE
        at jdk.internal.net.http.common.SSLFlowDelegate$Writer.processData(java.net.http@11.0.2/SSLFlowDelegate.java:771)
        at jdk.internal.net.http.common.SSLFlowDelegate$Writer$WriterDownstreamPusher.run(java.net.http@11.0.2/SSLFlowDelegate.java:645)
        at jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(java.net.http@11.0.2/SequentialScheduler.java:147)
        at jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(java.net.http@11.0.2/SequentialScheduler.java:198)
        at jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(java.net.http@11.0.2/SequentialScheduler.java:271)
        at jdk.internal.net.http.common.SequentialScheduler.runOrSchedule(java.net.http@11.0.2/SequentialScheduler.java:224)
        at jdk.internal.net.http.common.SSLFlowDelegate$Writer.triggerWrite(java.net.http@11.0.2/SSLFlowDelegate.java:722)
        at jdk.internal.net.http.common.SSLFlowDelegate.doHandshake(java.net.http@11.0.2/SSLFlowDelegate.java:1024)
        at jdk.internal.net.http.common.SSLFlowDelegate.doClosure(java.net.http@11.0.2/SSLFlowDelegate.java:1094)
        at jdk.internal.net.http.common.SSLFlowDelegate$Reader.unwrapBuffer(java.net.http@11.0.2/SSLFlowDelegate.java:500)
        at jdk.internal.net.http.common.SSLFlowDelegate$Reader.processData(java.net.http@11.0.2/SSLFlowDelegate.java:389)
        - locked <0x00000000fba68950> (a java.lang.Object)
        at jdk.internal.net.http.common.SSLFlowDelegate$Reader$ReaderDownstreamPusher.run(java.net.http@11.0.2/SSLFlowDelegate.java:263)
        at jdk.internal.net.http.common.SequentialScheduler$SynchronizedRestartableTask.run(java.net.http@11.0.2/SequentialScheduler.java:175)
        - locked <0x00000000fbbca3e8> (a java.lang.Object)
        at jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(java.net.http@11.0.2/SequentialScheduler.java:147)
        at jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(java.net.http@11.0.2/SequentialScheduler.java:198)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@11.0.2/ThreadPoolExecutor.java:1128)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@11.0.2/ThreadPoolExecutor.java:628)
        at java.lang.Thread.run(java.base@11.0.2/Thread.java:834)

   Locked ownable …
Run Code Online (Sandbox Code Playgroud)

java multithreading http http2 java-11

16
推荐指数
3
解决办法
996
查看次数

Java 8和11之间的流差异

考虑以下代码:

public static void main(String[] args) {
    Stream.iterate(1, i -> i + 1)
            .flatMap(i -> Stream.of(i, i, i))
            .peek(System.out::println)
            .limit(4)
            .forEach(i -> {});
}
Run Code Online (Sandbox Code Playgroud)

Java 8的输出:

1
1
1
2
2
2
Run Code Online (Sandbox Code Playgroud)

在Java 11中:

1
1
1
2
Run Code Online (Sandbox Code Playgroud)

这是Java 8中的错误或预期的行为,在11中进行了更改吗?

上面的代码只是演示不同行为的示例,但是更重要的含义是,以下代码在Java 11中显示1,2,3,但在Java 8中进入了无限循环:

    Stream.iterate(0, i -> i + 10)
            .flatMap(i -> Stream.iterate(i + 1, j -> j + 1))
            .limit(3)
            .forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream flatmap java-11

16
推荐指数
2
解决办法
701
查看次数

javax.annotation 类和 Java 11 JDK

我正在从 Java 8 迁移到 Java 11 并遇到了这个问题。我应该使用:

  • maven-compiler-plugin 2.5.1 与目标 1.8(在 java8 中编译 WAR)
  • tomcat9
  • 打开 JDK 11

但是在启动时不断出现错误:

合并bean定义后处理失败;嵌套异常是 java.lang.NoSuchMethodError: javax.annotation.Resource.lookup()Ljava/lang/String;

我找到了多种方法来修复它。尝试添加依赖项:

        <dependency>
            <groupId>javax.annotation</groupId>
            <artifactId>javax.annotation-api</artifactId>
            <version>1.3.2</version>
        </dependency>
Run Code Online (Sandbox Code Playgroud)

尝试添加扩展名:

   <extensions>
        <extension>
            <groupId>javax.annotation</groupId>
            <artifactId>javax.annotation-api</artifactId>
            <version>1.3.2</version>
        </extension>
    </extensions>
Run Code Online (Sandbox Code Playgroud)

这些都没有帮助。

这是 maven-compiler-plugin 配置:

    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.5.1</version>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
            <encoding>UTF-8</encoding>
        </configuration>
    </plugin>
Run Code Online (Sandbox Code Playgroud)

请帮忙寻找解决办法!!

java maven maven-compiler-plugin java-11

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

它是JDK11中LinkedHashMap中的死代码吗?

我正在阅读 JDK 11 中的 LinkedHashMap 源代码,我发现了一段死代码(我不确定)

众所周知,LinkedHashMap 使用双向链表来保存所有元素的顺序。它有一个成员叫做 accessOrder

final boolean accessOrder;
Run Code Online (Sandbox Code Playgroud)

默认情况下它是 false,但如果它被设置为 true,每次运行时get,它都会将它到达的元素移动到链表的末尾。这就是函数afterNodeAccess所做的。

//if accessOrder were set as true, after you visit node e, if e is not the end node of the linked list,
//it will move the node to the end of the linkedlist. 
    void afterNodeAccess(Node<K, V> e) {
        LinkedHashMap.Entry<K, V> last;

        if(accessOrder && (last = tail) != e) {

            //if enter `if` ?it indicates that e is not the end of …
Run Code Online (Sandbox Code Playgroud)

java dead-code linkedhashmap java-8 java-11

16
推荐指数
1
解决办法
222
查看次数