JaCoCo 和MultiRelease JAR 文件存在问题。由于两个地方存在相同的类名,JaCoCo 抱怨道:
Caused by: java.lang.IllegalStateException: Can't add different class with same name: jodd/core/JavaBridge
at org.jacoco.core.analysis.CoverageBuilder.visitCoverage(CoverageBuilder.java:107)
at org.jacoco.core.analysis.Analyzer$1.visitEnd(Analyzer.java:96)
Run Code Online (Sandbox Code Playgroud)
我们如何告诉 JaCoCo(在 Gradle 中)跳过 META-INF 路径中的类?或者根据 JVM 版本表现得像它应该的那样(使用正确的类并忽略其他版本)?
java.util.regex.Matcher在覆盖本机类(例如在非模块化代码库中)时,如何使用自定义类路径。
基本上我想做的是使用不同的类路径,就像--class-path build/custom修补类时一样。因为修改后的 Matcher.java 引用了编译为build/custom.
假设我已经修改了java.util.regex.Matcher,现在它需要一些其他(非 java)external.jar 才能运行。
那么我怎样才能像这样修补它:
javac --patch-module java.base=src,以便它也找到 external.jar 中的类。
目录结构:
+- build
+- src
+- PATCH
+- java
+- util
+- regex
+- Matcher.java
+- CUSTOM
+- com
+- example
+- MyClass.java
Run Code Online (Sandbox Code Playgroud)
两个类如下:
java.util.regex.Matcher:
package java.util.regex;
class Matcher {
com.example.MyClass myClass;
}
Run Code Online (Sandbox Code Playgroud)
com.example.MyClass:
package com.example;
public class MyClass {
}
Run Code Online (Sandbox Code Playgroud)
情况1
这有效:
javac -d build src/CUSTOM/com/example/MyClass.java
javac -d build --patch-module java.base=src src/PATCH/java/util/regex/Matcher.java
Run Code Online (Sandbox Code Playgroud)
案例#2
但是如果我将 MyClass …
当我在 Java 9 中编译 Spring Boot 应用程序时,它会在出现以下几条消息后失败:
package com.fasterxml.jackson.annotation is not visible
(package com.fasterxml.jackson.annotation is declared in the unnamed module, but module com.fasterxml.jackson.annotation does not read it)
Run Code Online (Sandbox Code Playgroud)
有人能告诉我这是怎么回事吗?据我了解,任何不在 Java-9 模块中的 Java 9 之前的代码都将成为未命名模块的一部分,其中会公开任何内容。
我在我的模块中使用它作为注释,如下所示:
@JsonIgnore
public Week getNextWeek()
{
Calendar instance = this.getFirstDay();
instance.set(Calendar.WEEK_OF_YEAR, this.week + 1);
return new Week(instance);
}
Run Code Online (Sandbox Code Playgroud)
那么,如果 com.fasterxml.jackson.annotation 包就是这种情况,为什么错误引用了具有该名称的模块,以及为什么它不读取它会出现问题?
我将我们的本机 Windows 应用程序启动器从 Java 8 移植到 Java 11。我们过去常常调用JNI_CreateJavaVM方法来实例化 JVM 实例、查找主类并调用其main方法。对于模块化应用程序,env->FindClass不会返回我们的应用程序类。我尝试调用Class.forName,但它也没有返回类实例。
另外,还有JNI_CreateJavaVM对争论的抱怨--add-modules。
我们应该如何指定 JNI api 加载的模块?
我该怎么做才能从本机部分找到应用程序类?
java java-native-interface java-platform-module-system jnienv java-11
将旧的 ERP 系统迁移到 JPMS 被证明是一个很大的问题(Java 11 Eclipse 找到了自动模块,Maven 没有),所以我决定首先尝试用 Java 11 简单地替换 Java 8,但通过不引入将所有内容保留在类路径上任何 module-info.java 文件。这实际上进行得很顺利。Maven 编译没有问题,生成的应用程序也从命令行启动。
但是当我将该 Maven 项目导入 Eclipse 2019-03 时,它会抱怨 ao java.xml 包,例如这个导入:
import javax.xml.namespace.QName;
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为 JRE 是模块化的,并且这些类在 java.xml 模块中,我没有包含。但是为什么 Maven 然后正确编译并且应用程序在 J11 下启动?
我怀疑我需要告诉 Eclipse 为这个项目“--add-modules=ALL-SYSTEM”,但我不确定在哪里或如何。我已经尝试将构建路径/库中的所有 JDK/JRE 模块从隐式移动到显式,但这无济于事。
我正在尝试在 JAVA11 中重新编译 JAVA8 代码。获得以下编译错误。
错误:对模块的引用不明确
private Module module;,com.module 中的接口 com.module.Module 和 java.lang 中的类 java.lang.Module 匹配
刚接触 Java 无法完全理解根本原因。任何信息都会有很大帮助。
假设我们有两个包含两个不同模块的 jar 文件。两个 jar 文件都在其 jar 中调用的文件夹中包含一些资源(比如说 png 文件)images。当我现在尝试在 java 中启动模块时,出现以下错误:
Error occurred during initialization of boot layer
java.lang.LayerInstantiationException: Package images in both module A and module B
Run Code Online (Sandbox Code Playgroud)
虽然我的images文件夹并不是一个包,而只是一个包含资源的文件夹。那么如何才能将两个带有images-fold 的模块放到我的模块路径上呢?
package springdemo4;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class HelloSpringApp {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Coach theCoach = context.getBean("myCoach",Coach.class);
System.out.println(theCoach.getDailyFortune());
System.out.println(theCoach.getDailyWorkout());
context.close();
}
}
Run Code Online (Sandbox Code Playgroud)
我运行它,然后它说:
启动层初始化时出错 java.lang.module.FindException:无法为 C:\Users\ngoch\eclipse-workspace\springdemo4\libs\spring-context-indexer-5.1.9.RELEASE-sources 派生模块描述符。 jar 由:java.lang.module.InvalidModuleDescriptorException:提供程序类 org.springframework.context.index.processor.CandidateComponentsIndexer 不在模块中
请帮忙
我正在将旧的 Java 应用程序转换为模块化的应用程序。它是一个 Gradle 项目,依赖项如下所示:
dependencies {
implementation 'org.jopendocument:jOpenDocument:1.3'
implementation 'xom:xom:1.3.2'
}
Run Code Online (Sandbox Code Playgroud)
在 App 类中,我的导入是:
dependencies {
implementation 'org.jopendocument:jOpenDocument:1.3'
implementation 'xom:xom:1.3.2'
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个 module-info.java 文件。但是当我这样做时,我的应用程序将无法编译,因为requiresmodule-info 文件中的指令是错误的。
import nu.xom.Document;
import nu.xom.Element;
import nu.xom.Serializer;
import org.jopendocument.dom.spreadsheet.MutableCell;
import org.jopendocument.dom.spreadsheet.Sheet;
import org.jopendocument.dom.spreadsheet.SpreadSheet;
Run Code Online (Sandbox Code Playgroud)
模块名称xom和jOpenDocument不足。但是我不知道这些依赖项应该是什么,也不知道如何重新配置 Gradle;如果那是我需要做的。
当我省略任一requires语句时,相应的imports 无法解析。我没有查看 JAR 文件。但我不认为任何一个工件是模块化的。
我正在使用 Gradle 5.6.2,我的目标是 Java 11。
java java-platform-module-system java-module module-info java-11
我需要在带有 JavaFX 的 maven 项目中使用反射,我想用它jlink来捆绑最小的 JRE。
问题是我在运行时收到以下错误mvn clean compile javafx:jlink:
[WARNING] Required filename-based automodules detected. Please don't publish this project to a public artifact repository!
Error: automatic module cannot be used with jlink: reflections from file:///C:/Users/Daniel/.m2/repository/org/reflections/reflections/0.9.12/reflections-0.9.12.jar
[ERROR] Command execution failed.
org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)
at org.apache.commons.exec.DefaultExecutor.executeInternal (DefaultExecutor.java:404)
at org.apache.commons.exec.DefaultExecutor.execute (DefaultExecutor.java:166)
at org.openjfx.JavaFXBaseMojo.executeCommandLine (JavaFXBaseMojo.java:504)
at org.openjfx.JavaFXBaseMojo.executeCommandLine (JavaFXBaseMojo.java:394)
at org.openjfx.JavaFXJLinkMojo.execute (JavaFXJLinkMojo.java:187)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156) …Run Code Online (Sandbox Code Playgroud) java-platform-module-system ×10
java ×9
java-11 ×4
java-9 ×3
java-module ×3
eclipse ×1
frameworks ×1
jacoco ×1
jar ×1
java-8 ×1
javac ×1
javafx ×1
jlink ×1
jnienv ×1
maven ×1
module-info ×1
spring ×1