标签: java-11

带有 TLS 1.3 的 Java 11 SSLHandshakeException:如何恢复到 TLS 1.2?

我的应用程序是一种“网络爬虫”形式,它使用Java Jsoup 库从所需的输入页面加载 HTML 。我最近将我的应用程序平台从 Java 8 升级到了 Java 11。通过这次升级,我收到了一些客户的报告,说他们在尝试加载某些网页的 HTML 内容时收到 SSLHandshakeExceptions。这些出现的网页因设备而异,在某些设备上,我的客户端根本无法加载任何网页(http:// 和 https:// 网页都没有)。

我尝试通过多种方式解决此问题,但无济于事:

  1. 用 Java 8 运行时的 CACERT 文件替换 Java 11 运行时的 CACERT 文件
  2. 创建一个自定义 SSL 证书接受器,无论有效性如何,它都接受所有 SSL 证书(我知道这对生产代码不利,但这仅用于测试目的)-请参阅通过 HTTPS 使用 HttpClient 信任所有证书

在这一点上,我不确定要采取哪些选择,因为我对 SSL、TLS 和 HTTPS 的了解有限。这些错误在 Java 8 中从未发生过,并且在升级到 Java 11 之前一切正常。

根据我的理解,Java 11 关于 SSL 的唯一改变是升级到 TLS 1.3,而之前版本的 Java 依赖于使用 TLS 1.2。

因此,我想强制 Java 11 使用 TLS 1.2 而不是 TLS 1.3,因为我认为这是 SSLHandshakeExceptions 的原因。我该怎么做呢?

java ssl tls1.2 java-11

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

AdoptOpenJDK 的 JRE 11+ 是否与在 JDK 上使用 jlink 相同,添加所有依赖项

AdoptOpenJDK 的 JRE 11+ 是否与仅使用jlink并添加所有依赖项相同?

Oracle Java 11 及更高版本不附带仅 JRE 的 JDK,因为您可以使用jlink构建自己的 JRE,其中仅包含您需要的系统模块,这就是我在 Windows 和 Linux 上所做的。

然而,对于如何为某些平台(Docker 和 MacOS)合并 jlinked JRE 对我来说并不是那么明显,并且由于 AdoptOpenJDK 不仅为 JDK 还提供了 JRE 的二进制文件,我想我可能只为这些平台使用 JRE。但是,如果我将 JDK 链接起来并包含所有系统模块依赖项,JRE 是否包含我会得到的所有内容?

java java-11 adoptopenjdk

6
推荐指数
1
解决办法
1130
查看次数

增加 AWS Elastic Beanstalk 上 Nginx 的 client_max_body_size。爪哇 11

我一直在尝试为Java 11 Beanstalk 部署中提供的Nginx服务器增加client_max_body_size,但没有成功。

到目前为止,我已经尝试了AWS Developer Guide方法,在 GitHub 中使用钩子的这种方法,以及我在这个StackOverflow 问题中找到的每个发布的解决方案, 使用 .ebextenstions 中的不同配置。

我遇到的错误因我采用的方法而异,从由于 Nginx 配置中的错误而根本没有部署应用程序到成功部署应用程序但未考虑新的文件大小限制。这些是我尝试过的一些捆绑结构:

捆绑 1

myBundle.zip
--myApplication.jar
--Procfile
--.ebextensions
----nginx
------conf.d
--------proxy.conf
Run Code Online (Sandbox Code Playgroud)

代理配置文件

client_max_body_size 50M;
Run Code Online (Sandbox Code Playgroud)

捆绑 2

myBundle.zip
--myApplication.jar
--Procfile
--.ebextensions
----myconf.config
Run Code Online (Sandbox Code Playgroud)

配置文件

files:
  "/etc/nginx/conf.d/proxy.conf" :
    mode: "000755"
    owner: root
    group: root
    content: |
      client_max_body_size 50M;

container_commands:
  01_reload_nginx:
    command: "sudo service nginx reload"
Run Code Online (Sandbox Code Playgroud)

捆绑 3

myBundle.zip
--myApplication.jar
--Procfile
--.ebextensions
----myhookconfig.config
Run Code Online (Sandbox Code Playgroud)

myhookconfig.config

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/enact/12_add_nginx_configuration.sh":
    mode: "000755"
    owner: …
Run Code Online (Sandbox Code Playgroud)

java nginx amazon-elastic-beanstalk java-11

6
推荐指数
1
解决办法
1484
查看次数

Eclipse jdk 11问题:无法解析类型java.lang.String。它是从所需的 .class 文件间接引用的

我有一个玩具程序,当我尝试使用 Chronicle 导入并编译到语言级别 11 时,该程序仅在 Eclipse 中出现编译错误。该程序在 maven 和 IntelliJ 中编译和运行(使用相同的 maven 和 JDK)。

我拥有的版本是:

  • 行家3.6.1
  • jdk openjdk版本“11”2018-09-25
  • 日食 2020-03-R
  • Chronicle-bom 2.19.199(自 2.17 起支持 java11)

这是我的 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>testjava11</groupId>
    <artifactId>chronicle-test</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>net.openhft</groupId>
                <artifactId>chronicle-bom</artifactId>
                <version>2.19.199</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>net.openhft</groupId>
            <artifactId>chronicle-map</artifactId>
        </dependency>
    </dependencies>
</project>
Run Code Online (Sandbox Code Playgroud)

这是我的简单测试类:

import net.openhft.chronicle.bytes.BytesMarshallable;

public class App {
    public static void main(String[] args) {
        System.out.println("BytesMarshallable: " + new BytesMarshallable() {});
    } …
Run Code Online (Sandbox Code Playgroud)

java eclipse java-11 openjdk-11

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

为什么模块路径上的模块需要 --add-modules ?

一个例子:由于 JavaFx 从 JDK 中删除,JavaFx SDK 现在作为一组模块化 jar 分发。要编译 JavaFx 应用程序,当然必须将它们放在模块路径中:

javac -p /path/to/jars/ App.java
Run Code Online (Sandbox Code Playgroud)

然而,这还不够。尝试编译会导致很多类似的错误

sample/App.java:3: error: package javafx.application is not visible
import javafx.application.Application;
             ^
  (package javafx.application is declared in module javafx.graphics, which is not in the module graph)
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,我们可以使用 --add-modules 添加 javafx.graphics:

javac -p /path/to/jars/ --add-modules javafx.graphics App.java
Run Code Online (Sandbox Code Playgroud)

但是,如果我们将 module-info.java(仅包含module ui {})添加到项目中,则没有问题。

为什么模块路径上的模块对命名模块可见,但对未命名模块不可见?

java java-platform-module-system java-9 java-module java-11

6
推荐指数
1
解决办法
4102
查看次数

Mapstruct 不使用 Lombok 定义的构建器

解决方案:

我不得不更改 mymapstruct和lombok annotationProcessorPaths.

我不得不放在mapstruct上面lombok,然后它起作用了。

我将下面的 pom 更新为工作版本,所以这里没有非工作代码。

我还将 lombok 版本转换回当前版本,而不是使用边缘版本。


原问题:

我有 2 组或多或少相同的类(见下面的例子)

  • 一组是我的 API 的 DTO,我希望它不可变,使用 Lombok 的 @Value 和 @Builder
  • 一组是将要存储在数据库中的实体。使用 Lombok 的 @Data

最初我将项目设置为使用:

  • 龙目岛 1.18.12
  • 映射结构 1.3.1
  • 爪哇 11
  • 马文

我发现 Lombok 文档解释了如何将注释处理器添加到 maven-plugin https://projectlombok.org/setup/maven

但是在执行时我仍然得到 Error:(16,25) java: ClassX does not have an accessible parameterless constructor.

搜索此消息时,我发现了一些 2 到 3 年的问题,但没有最新的。我也看到,这些帖子的问题已经解决。

至少在其中一篇文章中提到,当将项目拆分为模块时,它起作用了。这对我也有效。当我将 DTO 移动到另一个 maven 模块时,在那里构建它们并设置它工作的依赖项,但这绝对不是我想要的项目结构。此外,因为我可能还需要将我的实体移出,并且我不想为我正在创建的每个 Pojo 结构创建一个新模块。

我还发现 Lombok Edge 版本上的帖子:https : //projectlombok.org/download-edge 更改列表中的第二点是 …

maven lombok mapstruct java-11

6
推荐指数
1
解决办法
2935
查看次数

java.lang.reflect.InaccessibleObjectException:从 java 11 升级到 17 时无法生成受保护的最终 java.lang.Class

我们的项目使用[schema-repo-server][1]。启动 schema-repo-server 的代码如下 -

    package technorati.tut.fes;
    
    import org.schemarepo.server.RepositoryServer;
    import java.util.Properties;
    
    public class Main2 {
        public static void main(String[] args) throws Exception {
            Properties props = new Properties();
            props.put("schema-repo.class", "com.technorati.camus.schemaregistry.ZooKeeperRepository");
            props.put("schema-repo.zookeeper.ensemble", "kafka01.cap.qa.opal.synacor.com:2181,kafka02.cap.qa.opal.synacor.com:2181,kafka03.cap.qa.opal.synacor.com:2181");
            RepositoryServer rs = new RepositoryServer(props);
            rs.start();
        }
    
    }
    
Run Code Online (Sandbox Code Playgroud)

这段代码在java11中运行良好。

我正在将 java 版本从 java 11 升级到 java 17。升级后,当我启动服务时,出现以下错误。

注意:启动列表中的模块为 --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens jdk.management/com .sun.management.internal=全部未命名

我该如何解决这个问题?

14:18:48 信息 [org.schemarepo.server.RepositoryServer ] 通过 SLF4J 路由 java.util.logging 流量 线程“main”中的异常 com.google.inject.internal.util.$ComputationException:com 处的 java.lang.ExceptionInInitializerError .google.inject.internal.util.$MapMaker$StrategyImpl.compute(MapMaker.java:553) 位于 com.google.inject.internal.util.$MapMaker$StrategyImpl.compute(MapMaker.java:419) 位于 com.google .inject.internal.util.$CustomConcurrentHashMap$ComputingImpl.get(CustomConcurrentHashMap.java:2041) 位于 com.google.inject.internal.FailableCache.get(FailableCache.java:50) 位于 com.google.inject.internal.ConstructorInjectorStore。 …

java java-11 java-17

6
推荐指数
1
解决办法
3万
查看次数

如何在AWS EMR集群中使用java运行时11

我在 EMR aws 中造成混乱,当 Spark 运行我的应用程序时,我收到以下错误:

Exception in thread "main" java.lang.UnsupportedClassVersionError: 
com/example/demodriver/MyClassFromJAR has been compiled by a more recent version of the Java Runtime (class file version 55.0), 
this version of the Java Runtime only recognizes class file versions up to 52.0
Run Code Online (Sandbox Code Playgroud)

我emr-6.5.0在集群上使用releaseLabel,我的驱动程序jar是用java11构建的

如何在EMR中运行java11应用程序?或者这个错误与其他原因有关?

java amazon-emr apache-spark java-11

6
推荐指数
1
解决办法
7693
查看次数

org.xml.sax 包可以从多个模块访问:&lt;unnamed&gt;、java.xml

我们很久以前就写好了 Eclipse 插件。合规级别为 java.1.8。现在我已经将其更改为java 11。我们正在使用and。在构建时,我收到以下错误:

org.xml.sax 包可以从多个模块访问: 、 java.xml

有人可以帮忙吗?

提前致谢

eclipse-plugin java-11

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

java.lang.LinkageError:加载程序“bootstrap”尝试使用 Java11 和 Jacoco 0.8.5 为 java.lang.$JaCoCo 重复类定义

在 Jenkins 中运行测试项目时出现以下错误

Caused by: java.lang.LinkageError: loader 'bootstrap' attempted duplicate class definition for java.lang.$JaCoCo. (java.lang.$JaCoCo is in module java.base of loader 'bootstrap')

Jacoco 在父 pom 和当前测试 pom 中定义,具有不同的目标。

父pom.xml

<build>
  <plugins>
    <plugin>
      <groupId>org.jacoco</groupId>
      <artifactId>jacoco-maven-plugin</artifactId>
      <version>0.8.5</version>
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.13</version>
        </dependency>
      </dependencies>
      <executions>
        <execution>
          <id>validate-headless</id>
          <phase>validate</phase>
          <goals>
            <goal>prepare-agent</goal>
          </goals>
          <configuration>
            <skip>true</skip>
            <propertyName>failsafe.argLine</propertyName>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

测试项目-pom.xml

<properties>
  <maven.repo.local>${user.home}/.m2/repository</maven.repo.local>
  <itCoverageAgent>-javaagent:${maven.repo.local}/org/jacoco/org.jacoco.agent/0.8.5/org.jacoco.agent-0.8.5-runtime.jar=destfile=${basedir}/target/jacoco-it.exec</itCoverageAgent>
</properties>

<build>
  <plugins>
    <plugin>
      <artifactId>maven-failsafe-plugin</artifactId>
      <configuration>
        <argLine>${failsafe.argLine} ${itCoverageAgent}</argLine>
        <testFailureIgnore>true</testFailureIgnore>
        <reuseForks>true</reuseForks>
      </configuration>
    </plugin>
  </plugins>
</build>

<profiles>
  <profile>
    <id>coverage</id>
    <build> …
Run Code Online (Sandbox Code Playgroud)

java maven jacoco java-11 jacoco-plugin

6
推荐指数
1
解决办法
4194
查看次数