小编Nam*_*man的帖子

无法从java.base模块导出包

使用IDEA-EAP进行JDK9开发实验.

我收到以下错误 -

Error:(3, 20) java: package jdk.internal.misc is not visible  
(package jdk.internal.misc is declared in module java.base, which does
not export it to module com.jigsaw.npe)
Run Code Online (Sandbox Code Playgroud)

类定义如下 -

package experiment;
import jdk.internal.misc.Unsafe;

public class CompareAndSwap {

    static Unsafe UNSAFE = Unsafe.getUnsafe();
    ...
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试module-info.java在使用IDE创建的模块中包含一个文件,其中包含以下语句 -

module com.jigsaw.npe {
    requires java.base;
}
Run Code Online (Sandbox Code Playgroud)

目录结构现在看起来如图所示 -

目录结构

IDE虽然反映了module-info.java未使用的,但可能这就是我无法定义module com.jigsaw.npe上面尝试过的原因.

寻求一些帮助,了解如何正确放置module-info.java和/或除了我错过的以外的任何东西.

java java-platform-module-system java-9 java-module module-info

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

无法识别的VM选项'UseParNewGC',错误:无法创建Java虚拟机

我正在尝试使用jre 10.0.1 64位启动服务器.Windows启动批处理文件中的JVM设置有明显变化.通过设置-XX:+UseParNewGC 作为错误的参考点,为了使JVM服务器从java 10开始,而不是我已经显示的java 8设置,需要将其更改为什么?

导致错误引用的代码行是:

set JAVA_PARAMETERS=-XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:+CMSClassUnloadingEnabled -XX:ParallelGCThreads=2 -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10
Run Code Online (Sandbox Code Playgroud)

jvm jvm-crash java-10

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

MongoDB的预测效率如何?

在查询mongo数据库时,排除文档中的几乎所有数据会有很多开销吗?

例如,在我只需要field1field2的情况下,对于具有以下文档结构的集合:

{
    "field1" : 1
    "field2" : true
    "field3" : ["big","array",...]
    "field4" : ["another","big","array",...]
}
Run Code Online (Sandbox Code Playgroud)

我会从中受益更多:

  1. 在此集合旁边创建一个单独的集合,其中仅包含field1和field2,或
  2. 使用包含/排除参数在原始文档上使用.find()

注意:保存相同数据两次的低效率对我来说并不像我查询数据的效率那么重要

非常感谢!

projection mongodb

13
推荐指数
1
解决办法
1119
查看次数

Dropwizard:java.lang.IllegalStateException:无法获取记录器上下文

我有一个项目,里面有多个模块.其中一个模块,比如说"main",就是我的服务类"MyService.class".Dropwizard有一个jar - dropwizard-core.我想在多个模块中使用这个jar,所以我想在父POM中保持它的依赖性.通过这样做,在运行我的dropwizard服务文件时,我遇到如下异常:

SLF4J: Class path contains multiple SLF4J bindings.<br>
SLF4J: Found binding in [jar:file:/home/username/.m2/repository/org/slf4j/slf4j-simple/1.7.12/slf4j-simple-1.7.12.jar!/org/slf4j/impl/StaticLoggerBinder.class]<br>
SLF4J: Found binding in [jar:file:/home/username/.m2/repository/ch/qos/logback/logback-classic/1.1.3/logback-classic-1.1.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]<br>
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.<br>
SLF4J: Actual binding is of type [org.slf4j.impl.SimpleLoggerFactory]<br><br>
Exception in thread "main" java.lang.IllegalStateException: Unable to acquire the logger context
                at io.dropwizard.logging.LoggingUtil.getLoggerContext(LoggingUtil.java:46)
                at io.dropwizard.logging.BootstrapLogging.bootstrap(BootstrapLogging.java:45)
                at io.dropwizard.logging.BootstrapLogging.bootstrap(BootstrapLogging.java:34)
                at io.dropwizard.Application.<init>(Application.java:24)
                at my.project.package.MyService.<init>(MyService.java:31)
                at my.project.package.MyService.main(MyService.java:38)
Run Code Online (Sandbox Code Playgroud)

如果我将依赖项放在"main"模块的POM中,那么这个项目运行得很好.

Dropwizard与错误的记录器绑定,这就是这个异常背后的原因.但这种绑定发生在后台,我无法控制它.

我也在为这两个场景共享依赖树.

案例1:当dropwizard-core在子POM(主模块)中时:

my.groupId.myProject:myProject-main:jar:1.0-SNAPSHOT<br>
[INFO] +- io.dropwizard:dropwizard-core:jar:0.9.2:compile<br>
[INFO] |  +- io.dropwizard:dropwizard-util:jar:0.9.2:compile<br>
[INFO] |  |  +- com.fasterxml.jackson.core:jackson-annotations:jar:2.6.0:compile<br>
[INFO] |  |  +- com.google.guava:guava:jar:18.0:compile<br>
[INFO] | …
Run Code Online (Sandbox Code Playgroud)

java logging slf4j maven dropwizard

13
推荐指数
1
解决办法
3745
查看次数

如何运行JDK 9 jlink生成的图像?

我在这里关注Jigsaw 快速入门.我成功运行了jlink给出的命令:

jlink --module-path $JAVA_HOME/jmods:mlib --add-modules com.greetings --output greetingsapp
Run Code Online (Sandbox Code Playgroud)

这会生成一个"运行时映像",它是一个展开的目录结构,如下所示:

~ tree -d greetingsapp
greetingsapp
??? bin
??? conf
?   ??? security
?       ??? policy
?           ??? limited
?           ??? unlimited
??? include
?   ??? darwin
??? legal
?   ??? java.base
??? lib
    ??? jli
    ??? security
    ??? server
Run Code Online (Sandbox Code Playgroud)

我该怎么办?我期待一个二进制可执行文件,而不是一个展开的目录树.

bin目录有一个java和一个keytool.我没有看到任何.jar文件或.class文件通过捆绑的java可执行文件运行.

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

13
推荐指数
1
解决办法
6091
查看次数

Java 9中的类加载器层次结构

从Java-8开始,我知道类加载器的层次结构如下: -

Bootstrap类加载器 - >扩展类加载器 - >应用程序类加载器

Java 9中类加载器层次结构的变化是什么?它是如何工作的?

java classloader java-9 java-module

13
推荐指数
2
解决办法
4033
查看次数

java-10中的Collectors.toUnmodifiableList

如何创建Unmodifiable列表/集/映射Collectors.toList/toSet/toMap,因为toList(等)文档为:

返回的List 的类型,可变性,可序列化或线程安全性无法保证

之前的java-10,你必须提供一个FunctionCollectors.collectingAndThen,例如:

 List<Integer> result = Arrays.asList(1, 2, 3, 4)
            .stream()
            .collect(Collectors.collectingAndThen(
                    Collectors.toList(),
                    x -> Collections.unmodifiableList(x)));
Run Code Online (Sandbox Code Playgroud)

java java-stream java-10

13
推荐指数
2
解决办法
537
查看次数

使用新的 Record 类时无法反序列化

我想看看我是否可以用 Java 14 中的新 Record 类替换我现有的 Pojo。但无法这样做。得到以下错误:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造实例com.a.a.Post(无创建者,如默认构造,存在):无法从对象值反序列化(无基于委托或属性的创建者)

我知道错误是说记录没有构造函数,但是从我所看到的记录类在后台处理它,并且相关的 getter 也在后台设置(不完全是 getter,而是 id() title() 等等没有 get 前缀)。是不是因为 Spring 还没有采用最新的 Java 14 记录?请指教。谢谢。

我在 Spring Boot 版本 2.2.6 中执行此操作并使用 Java 14。

以下使用通常的 POJO 工作。

邮政类

public class PostClass {
    private int userId;
    private int id;
    private String title;
    private String body;

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) { …
Run Code Online (Sandbox Code Playgroud)

java spring spring-boot java-14 java-record

13
推荐指数
2
解决办法
2556
查看次数

如何在 Java 17 中通过反射获取所有记录字段及其值?

我上过一堂课:

class A {
   public final Integer orgId;
}
Run Code Online (Sandbox Code Playgroud)

我将其替换为Java 17中的记录:

record A (Integer orgId) {
}
Run Code Online (Sandbox Code Playgroud)

另外,我有一个通过反射进行验证的代码,该代码适用于常规类,但不适用于记录:

Field[] fields = obj.getClass().getFields(); //getting empty array here for the record
for (Field field : fields) {
}
Run Code Online (Sandbox Code Playgroud)

在 Java 17 中通过反射获取 Record 对象字段及其值的正确方法是什么?

java reflection java-record java-17

13
推荐指数
1
解决办法
7679
查看次数

从maven获取$ {basedir}的父目录

有没有办法${basedir}在我的pom.xml中获取父目录?目前我有

<earSourceDirectory>${basedir}/EAR/src/main/resources</earSourceDirectory> 
Run Code Online (Sandbox Code Playgroud)

但我需要访问basedir的父目录,因为我的资源位于不同的maven项目中.

如何获取$的父文件夹{basedir}

java maven

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