使用 JDK 11 时,我无法理解以下类型安全问题。谁能解释当我直接传递Set.of
参数时没有收到编译错误的原因:
public static void main(String[] args) {
var intSet1 = Set.of(123, 1234, 101);
var strValue = "123";
isValid(strValue, intSet1);// Compilation error (Expected behaviour)
**isValid(strValue, Set.of(123, 1234, 101));// No Compilation error**
}
static <T> boolean isValid(T value, Set<T> range) {
return range.contains(value);
}
Run Code Online (Sandbox Code Playgroud)
您可以在 IdeOne.com 上实时运行此代码。
我正在向 Java 密钥库添加证书,但收到以下警告。命令成功。
keytool -import -trustcacerts -keystore /usr/lib/jvm/java-11-openjdk-amd64/lib/security/cacerts -storepass changeit -noprompt -alias my_root_ca.pem -file /usr/share/ca-certificates/foo/my_root_ca.pem
Run Code Online (Sandbox Code Playgroud)
警告是:
Warning: use -cacerts option to access cacerts keystore
Run Code Online (Sandbox Code Playgroud)
我如何摆脱这个警告?
谢谢
我在Travis CI中安装openjdk11时遇到问题。
这是我得到的错误
Installing openjdk11
$ export JAVA_HOME=~/openjdk11
$ export PATH="$JAVA_HOME/bin:$PATH"
$ ~/bin/install-jdk.sh --target "/home/travis/openjdk11" --workspace "/home/travis/.cache/install-jdk" --feature "11" --license "GPL" --cacerts
install-jdk.sh 2019-04-18
The command "~/bin/install-jdk.sh --target "/home/travis/openjdk11" --workspace "/home/travis/.cache/install-jdk" --feature "11" --license "GPL" --cacerts" failed and exited with 51 during .
Your build has been stopped.
Run Code Online (Sandbox Code Playgroud)
.travis.yml
language: java
jdk: openjdk11
cache:
directories:
- "$HOME/.m2/repository"
Run Code Online (Sandbox Code Playgroud) 我已经编写了一个 dockerfile,用于使用 debian 基础映像创建 selenium 映像,当我安装 JDK11 时,我看到这些错误。
RUN apt-get upgrade
RUN apt-get update
RUN apt-get -y install apt-transport-https curl
RUN apt-get -qqy --no-install-recommends install bzip2
RUN apt-get -qqy --no-install-recommends install ca-certificates
RUN mkdir -p /usr/share/man/man1
RUN apt-get -qqy --no-install-recommends install openjdk-11-jre-headless
RUN apt-get -qqy --no-install-recommends install ca-certificates-java
RUN dpkg --list | grep java
RUN apt-get -qqy --no-install-recommends install sudo
RUN apt-get -qqy --no-install-recommends install unzip
RUN apt-get -qqy --no-install-recommends install gdebi-core
COPY files/chrome/google-chrome_amd64.deb /google-chrome_amd64.deb
RUN gdebi --n /google-chrome_amd64.deb
RUN …
Run Code Online (Sandbox Code Playgroud)我尝试使用 Springboot 2.2.4.RELEASE + JDK11 和 java 8 编译使用 XML 和 JSON 创建 Web API。
我的模型:
@XmlRootElement
public class DataModel {
private List<String> columns;
private List<Row> rows;
public List<String> getColumns() {
return columns;
}
public void setColumns(List<String> columns) {
this.columns = columns;
}
public List<Row> getRows() {
return rows;
}
public void setRows(List<Row> rows) {
this.rows = rows;
}
}
Run Code Online (Sandbox Code Playgroud)
我的控制器:
@RequestMapping(value = "/{model}/columns", method = RequestMethod.GET, consumes = MediaType.ALL_VALUE, produces = { MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE })
public ResponseEntity<DataModel> getColumnsModel(@PathVariable String …
Run Code Online (Sandbox Code Playgroud) 我写了一个简单的java程序来基本上运行:
System.out.println(InetAddress.getLocalHost().getHostName());
如果我在 Java 1.7.231 或 1.8.221 上编译它并在 RHEL 7.7 上运行它,它会返回 FQDN (computer.domain.com),但在同一服务器上,在 RHEL JDK 11.0.2 中编译它,它仅返回服务器名称。
据我了解,它应该执行反向 DNS 查找(基本上是主机名 -f),但对于 JDK 11,行为肯定有所不同。知道为什么会发生这种情况吗?
我尝试使用非 root 用户构建并运行该映像,但不断收到错误:“无法找到用户测试:passwd 文件中没有匹配的条目。”
我的 Docker 文件如下所示:
FROM openjdk:11-jre-slim
RUN addgroup --system test
RUN adduser --system testuser --ingroup test
USER test:testuser
COPY build/libs/abc-0.0.1.jar app.jar
ENTRYPOINT ["java","-jar", "app.jar"]
Run Code Online (Sandbox Code Playgroud)
我已经尝试搜索错误并查看了其他地方,但似乎没有一个对我有用。有人可以帮我吗?我知道我可以使用 root 用户运行它,但我不想这样做,或者如果我可以使用另一个 Openjdk11 映像来使其工作,那也没关系。
我正在java.awt.Robot
Linux 下使用 OpenJDK 11创建屏幕截图。 Linux 上的结果是一个全黑图像。相同的代码适用于 Ubuntu 和 Windows(当然使用另一个文件路径)。
有什么线索吗?
public void captureScreen() throws AWTException {
Robot robot = new Robot(GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice());
BufferedImage screen = robot.createScreenCapture(new Rectangle(getDefaultToolkit().getScreenSize()));
try {
ImageIO.write(screen, "jpg", new File("/tmp/screenshot.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
更新: 问题的原因在于OpenJDK和Wayland的组合。使用 Oracle JDK/JRE (13.0.1) 一切正常。
我有一个模拟类,其中包含我从模块提供的服务的简单实现。我使用的是 OpenJDK 11.03、gradle 5.2.1 和 IntelliJ 2019.2。
在/main/code/myPackage/myService.java
我有:
package myPackage;
class myService {
public abstract void someFunction();
}
Run Code Online (Sandbox Code Playgroud)
在我的test/code/somePackage/myMockService
我有:
package myPackage;
// no import, they're in the same package.
class myMockService extends myService {
@Override
public void someFunction() { System.out.prinln("Hello World"); }
}
Run Code Online (Sandbox Code Playgroud)
在我的main/code/module-info.java
我有:
module myModule {
exports somePackage;
}
Run Code Online (Sandbox Code Playgroud)
我在 a 上尝试了几种变体test/code/module-info.java
,但没有成功。例如:
// "open module" lets anyone use reflection within (mostly JUnit 5 in my case)
import myPackage.myService;
import myPackage.myMockService;
open …
Run Code Online (Sandbox Code Playgroud) 有人可以帮助我理解我所看到的是 Java11 中故意的、正确的行为还是某种泄漏吗?让我们看一个愚蠢简单的 hello world 应用程序:
package com.example;
public class HelloWorld {
public static void main(String[] args) throws InterruptedException {
for( int i =0 ; i < 50; i++){
Thread.sleep(1000);
System.out.println("hello " + i);
}
}
}
Run Code Online (Sandbox Code Playgroud)
唯一有趣的部分是 jar 依赖项。它可以是任何 jar,但为了让问题更加引人注目,让我们使用一个大的 - 旧的 gwt-user jar,它重 30MB:
plugins {
id 'java'
}
group 'com.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
// https://mvnrepository.com/artifact/com.google.gwt/gwt-user
compile group: 'com.google.gwt', name: 'gwt-user', version: '2.7.0'
}
Run Code Online (Sandbox Code Playgroud)
运行应用程序,打开 jvisualvm,进行转储并查找保留的一组java.util.zip.ZipFile$Source
:
类路径中的 jar(实际上从未使用过)占用 1.5MB 的堆。它不会在 GC …