小编Nam*_*man的帖子

如何从Java Web Start(JDK 8)升级到jlink(JDK 9+)以获取自动更新应用程序?

Java 8和早期版本具有Java Web Start,它在我们更改应用程序时自动更新应用程序.Oracle建议用户迁移到jlink,因为这是新的Oracle技术.到目前为止,这听起来不错.这带来了许多好处:

  1. Windows,Mac和Linux上的本机代码
  2. 代码的模块化(尽管Proguard也这样做)
  3. 使用新的,支持的技术.

问题:我找不到使用jlink自动更新的规范Java解决方案.

有人会认为Java Web Start可以继续使用,特别是如果随便读取这个文档.请注意Java Web Start继续显着列出的事实.但美中不足的是:Oracle正在弃用Java Web Start.它将在JDK 11中删除.那么,正式的道路是什么呢?如果不这样做,人们会采用标准方式吗?

出于本问题的目的,以下内容超出范围:

  • 每年向拥有功能丰富的企业解决方案的人支付巨额资金.要分发的应用程序已经打包到一个小于50MB的jar中.
  • 强制用户运行InstallShield样式应用程序以重新安装新版本,然后在每次推送更新时手动卸载旧版本.那是1990年代的.
  • 将整个应用程序移植为webapp,重写UI和客户端逻辑以适应浏览器并处理所需的所有不兼容性.该应用程序的作者致力于GWT并确切知道Web浏览器的功能.不幸的是,他们也知道所需的努力程度.
  • 允许用户继续运行旧版本的应用程序.这也是1980年代的事情.现代应用程序可以快速更新,并且支持所发布的每个应用程序版本都不可行.这就是我父亲的COBOL应用程序必须处理的事情,他并不喜欢它.我希望技术进步.
  • 继续使用Java Web Start.除非Oracle改变主意,否则Java Web Start是一种注定要失败的技术.

java deployment java-web-start jlink java-9

48
推荐指数
1
解决办法
1163
查看次数

计算Java String中的行数

需要一些紧凑的代码来计算Java中字符串中的行数.该字符串将由\r或分隔\n.这些换行符的每个实例都将被视为一个单独的行.例如 -

"Hello\nWorld\nThis\nIs\t"
Run Code Online (Sandbox Code Playgroud)

应该返回4.原型是

private static int countLines(String str) {...}
Run Code Online (Sandbox Code Playgroud)

有人能提供一套紧凑的陈述吗?我在这里有一个解决方案,但是我觉得它太长了.谢谢.

java string lines

47
推荐指数
7
解决办法
7万
查看次数

Java 记录是否旨在最终成为值类型?

recordJDK 14 中引入的预览功能 (JEP 384) 是一项伟大的创新。它们使创建简单的不可变类变得更加容易,这些类是纯粹的值集合,而不会丢失各种库中通用元组类中固有的上下文。

由 Brian Goetz ( https://openjdk.java.net/jeps/384 )编写的 JEP 描述很好地解释了意图。然而,我期待与最终引入的值类型有更密切的联系。值类型的最初目标是相当广泛的:通过消除这些类型的对象不需要的所有开销(例如引用间接、同步),本质上允许对那些最重要的对象进行潜在的显着性能改进。此外,它还可以提供句法细节,例如myPosition != yourPosition代替!myPosition.equals(yourPosition).

似乎记录的限制与潜在值类型所需的限制类型非常接近。然而,JEP 在动机中没有提及这些目标。我试图找到有关这些审议的任何公开记录,但没有成功。

所以我的问题是:记录是否旨在成为可能向值类型转变的一部分,还是这些完全不相关的概念和未来的值类型可能看起来完全不同?

我提出这个问题的动机是:如果记录成为语言的永久部分,那么如果在未来的版本中可能会带来显着的性能优势,那么在代码中采用它们将是一个额外的动力。

java java-14 java-record

45
推荐指数
2
解决办法
2411
查看次数

JDK9:发生了非法的反射访问操作.org.python.core.PySystemState

我正在尝试使用Java9(JDK9)运行DMelt程序(http://jwork.org/dmelt/)程序,它给了我错误,例如:

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.python.core.PySystemState (file:/dmelt/jehep/lib/jython/jython.jar) to method java.io.Console.encoding()
WARNING: Please consider reporting this to the maintainers of org.python.core.PySystemState
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)

我该如何解决?我试图将-illegal-access = permit添加到脚本"dmelt.sh"的最后一行(我在Linux中使用bash),但这并没有解决这个问题.我很沮丧.我经常使用这个程序很长一段时间.也许我永远不应该转向JDK9

java java-9 java-module

44
推荐指数
2
解决办法
6万
查看次数

在JDK 11中是否有CORBA的替换库

JDK-11将删除JDK的许多旧部分(JEP-320).对于其中一些(例如JAXB),功能将作为常规库提供.您只需添加另一个依赖项,一切正常.

但对于CORBA则不然,因为

使用Java中的CORBA开发现代应用程序没有太大的兴趣

然而,我仍然处于痛苦的境地,需要维护仍旧需要CORBA的旧应用程序,同时仍希望更新到JDK-11.

在没有删除这些应用程序的CORBA功能的情况下,是否有替换库或迁移到JDK-11的另一种好方法?

java corba java-module java-11

35
推荐指数
3
解决办法
5787
查看次数

Java 14 中的 NullPointerException 与其前身有何不同?

Java SE 14 引入的重要特性之一是Helpful NullPointerExceptions,它与NullPointerException. 是什么让NullPointerExceptionJava SE 14 比它的前身更有用?

java nullpointerexception java-14

33
推荐指数
3
解决办法
2470
查看次数

在原语或原始包装类中使用带有文字结果的var吗?

在阅读并讨论Java 10s新保留类型名称var (JEP 286:局部变量类型推断)之后,讨论中出现了一个问题.

与文字一起使用时,如:

var number = 42;
Run Code Online (Sandbox Code Playgroud)

number现在的int还是一个Integer?如果您只是将它与比较运算符一起使用或作为参数使用它通常无关紧要,这要归功于自动装箱和开箱.但由于Integer成员职能,它可能很重要.

那么哪个类型是由原varint或类创建的Integer

java type-inference local-variables java-10

32
推荐指数
3
解决办法
1515
查看次数

WebClient与RestTemplate

按照春季5:

WebClient是表示执行Web请求的主要入口点的接口.

它已作为Spring Web Reactive模块的一部分创建,并将在这些场景中替换经典的RestTemplate.新客户端是一种通过HTTP/1.1协议工作的反应式非阻塞解决方案

这是否意味着,如果我们想要升级到Spring 5,我们需要使用RestTemplate重新编码旧应用程序?

或者在Spring 5中使用RestTemplate有一些解决方法?

spring reactive-programming web-client resttemplate

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

Lombok 访问 jdk.compiler 的内部包与 Java-16 不兼容

只需将我的一个项目从 Java-15 升级到 16(使用此处的最新版本)。在编译使用 lombok 的项目时,例如:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.16</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我有点被堆栈跟踪卡住了

Caused by: java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor (in unnamed module @0x4e670245) cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.processing to unnamed module @0x4e670245
    at lombok.javac.apt.LombokProcessor.getJavacProcessingEnvironment (LombokProcessor.java:433)
    at lombok.javac.apt.LombokProcessor.init (LombokProcessor.java:92)
    at lombok.core.AnnotationProcessor$JavacDescriptor.want (AnnotationProcessor.java:160)
    at lombok.core.AnnotationProcessor.init (AnnotationProcessor.java:213)
    at lombok.launch.AnnotationProcessorHider$AnnotationProcessor.init (AnnotationProcessor.java:64)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$ProcessorState.<init> (JavacProcessingEnvironment.java:702)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors$ProcessorStateIterator.next (JavacProcessingEnvironment.java:829)
Run Code Online (Sandbox Code Playgroud)

现在,至少我认为我知道解决这个问题的技巧,但即使在尝试以下配置时 maven-compiler-plugin

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
        <source>16</source>
        <target>16</target>
        <!--                    <release>16</release>-->
        <compilerArgs>
            <arg>--enable-preview</arg>
            <arg>-Xlint:all</arg>
            <arg>--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
        </compilerArgs>
        <!--for unmappable …
Run Code Online (Sandbox Code Playgroud)

java incompatibility maven lombok java-16

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

Java 9中--add-exports和--add-opens之间有什么区别?

由于新的模块系统,Java 9(jdk-9 + 170)默认情况下不允许应用程序查看JDK中的所有类,这与以前的所有Java版本不同.

要解决此问题,java命令行会提供一个新参数--add-exports,允许按如下方式中断封装:

java -jar josm.jar --add-exports java.base/sun.security.util=ALL-UNNAMED --add-exports java.base/sun.security.x509=ALL-UNNAMED

这在JEP 261中得到了很好的解释.

我已经阅读了--add-opens使用相同语法的类似选项,但是JEP 261尚未更新来描述它(最后更新:2017/03/08 13:58).

这两个选项有什么区别?

编辑:JEP 261已在2017-09-22更新以解释它.

java command-line-arguments java-platform-module-system java-9 java-module

29
推荐指数
1
解决办法
9828
查看次数