小编gjo*_*anv的帖子

Powermock 与 JDK 17 的兼容性

最近我正在将项目从 JDK 11 升级到 JDK 17。升级后,powermock 似乎出现问题。运行 AUT 时,出现以下错误:

java.lang.RuntimeException: PowerMock internal error: Should never throw exception at this level
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected native java.lang.Object java.lang.Object.clone() throws java.lang.CloneNotSupportedException accessible: module java.base does not "opens java.lang" to unnamed module @3fc34119
Run Code Online (Sandbox Code Playgroud)

您是否知道此问题的任何解决方法,如果可以,请提供解决方案。

java mocking powermock powermockito java-17

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

maven-bundle-plugin失败,出现"无效的类文件module-info.class"

添加包含JPMS模块的依赖项后,maven-bundle-plugin(版本3.3.0)将失败:

[INFO] --- maven-bundle-plugin:3.3.0:bundle (default-bundle) @ my-bundle ---
[ERROR] Bundle myGroup:my-bundle:bundle:1.0 : 
        Exception: java.lang.ArrayIndexOutOfBoundsException: 19
[ERROR] Bundle myGroup:my-bundle:bundle:1.0 : 
        Invalid class file module-info.class (java.lang.ArrayIndexOutOfBoundsException: 19)
Run Code Online (Sandbox Code Playgroud)

似乎插件尝试(并且失败)来分析module-info.class,这在OSGi上下文中应该是无关紧要的.

java osgi maven-bundle-plugin java-9

7
推荐指数
1
解决办法
2073
查看次数

父pom的版本RELEASE或LATEST

从maven 3.5.2开始,如果依赖项的版本设置为RELEASE或,则会显示以下警告LATEST

[警告] <groupId>:<artifactId>:jar的'dependencies.dependency.version'为最新或发布(均已弃用)

如果pom的版本设置为例如,则不会发出此警告:RELEASE

<parent>
    <groupId>com.mydomain</groupId>
    <artifactId>base</artifactId>
    <version>RELEASE</version>
</parent>
Run Code Online (Sandbox Code Playgroud)

这是故意的,以便我们可以安全地继续依赖RELEASE父pom的版本吗?

我们的用例是为约100个租户托管服务,这些服务需要一组通用的配置文件和一些依赖性管理等。此通用配置在我们的“基础” pom中定义,每个租户的pom都将其用作父级。我们需要所有租户使用父pom的相同版本和最新发布的版本。

maven

5
推荐指数
1
解决办法
3370
查看次数

为什么 javac 在使用参数化类型的已弃用构造函数时不产生警告?

假设您有一个带有已弃用的构造函数的参数化类,以及一个User调用此构造函数的类。在下面的示例中,使用菱形运算符,javac(版本 11.0.11)不会生成弃用警告:

class DepTester<T> {
    T t;

    @Deprecated
    public DepTester(T t) {
        this.t = t;
    }
}

class User {
    DepTester<String> tester = new DepTester<>("This does not produce a warning!");
}
Run Code Online (Sandbox Code Playgroud)

但是,如果在构造函数调用中使用显式类型参数,则会发出警告:

class User {
    DepTester<String> tester = new DepTester<String>("This produces a warning.");
}

[WARNING] DepTester.java:[17,40] DepTester(T) in com.foo.DepTester has been deprecated
Run Code Online (Sandbox Code Playgroud)

通常不包含显式类型参数,IntelliJ 检查也会对此发出警告:

显式类型参数 String 可以替换为 <>

我在Java 语言规范中找不到这种行为的解释。我尝试使用 javac 17,它在两种情况下都会产生警告,那么这是 javac 11 中的错误吗?

编辑:我向 Oracle 提交的错误报告在 Java 错误数据库中分配了一个 ID:JDK-8281107

java javac java-11

5
推荐指数
1
解决办法
152
查看次数

Maven-bundle-plugin: osgi.ee=UNKNOWN

使用 JDK 10 构建我的 OSGi 包时,maven-bundle-plugin (3.5.1) 生成以下清单属性:

Require-Capability: osgi.ee;filter:="(osgi.ee=UNKNOWN)"
Run Code Online (Sandbox Code Playgroud)

这在运行时失败:

Unresolved requirements: [[com.mycompany.mybundle [1](R 1.0)] osgi.ee; (osgi.ee=UNKNOWN)]
Run Code Online (Sandbox Code Playgroud)

使用 JDK 9 构建时,我得到了预期:

Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=9.0))"
Run Code Online (Sandbox Code Playgroud)

我将 maven-compiler-plugin 的源和目标版本分别设置为“1.9”和“10”。

目前,我正在使用一种解决方法来阻止插件添加osgi.ee到清单:

<configuration>
  <instructions>
      <_noee>true</_noee>
  </instructions>
</configuration>
Run Code Online (Sandbox Code Playgroud)

.. 但我宁愿有正确的 Java 10 要求。

osgi maven bnd maven-bundle-plugin java-10

4
推荐指数
1
解决办法
2033
查看次数