标签: module-info

无法使用Maven编译简单的Java 10/Java 11项目

我有一个简单的Maven项目:

src
??? main
    ??? java
        ??? module-info.java
pom.xml
Run Code Online (Sandbox Code Playgroud)

pom.xml中:

<groupId>org.example</groupId>
<artifactId>example</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>example</name>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <release>10</release>
            </configuration>
        </plugin>
    </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

当我通过构建项目时mvn -X install -DskipTests=true,它失败了:

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:testCompile (default-testCompile) on project example: Execution default-testCompile of goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:testCompile failed.
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:213)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:154)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:146)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
        at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:309)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:194)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:107)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:993)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:345)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:191)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) …
Run Code Online (Sandbox Code Playgroud)

java maven java-10 module-info java-11

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

需求和需要Java 9中的传递语句有什么区别?

需求需要模块声明中的传递模块语句有什么区别?

例如:

module foo {
    requires java.base;
    requires transitive java.compiler;
}
Run Code Online (Sandbox Code Playgroud)

java requires java-9 java-module module-info

54
推荐指数
3
解决办法
6606
查看次数

Maven - 如何删除阴影 .jar 的 module-info.class 警告?

所以这是我的问题...

我正在使用 maven-shade 插件将 Spring Boot 应用程序打包到 uber jar 中。很简单吧?好吧,除了最近我在结尾处收到以下警告mvn clean package

[WARNING] Discovered module-info.class. Shading will break its strong encapsulation.

这实际上并没有破坏任何东西,但我是一个完美主义者,这让我发疯了吗?我该如何摆脱它?我尝试了很多东西,但没有成功。

请帮忙 :(

java uberjar maven maven-shade-plugin module-info

27
推荐指数
1
解决办法
9206
查看次数

什么是Java 9中的开放模块以及如何使用它

模块与open关键字之前和之后有什么区别?
例如:

open module foo {
}

module foo {
}
Run Code Online (Sandbox Code Playgroud)

java java-9 java-module module-info

21
推荐指数
2
解决办法
4713
查看次数

无法在Java 9中为自动生成的模块名称派生模块描述符?

我的项目依赖于Netty Epoll传输.这是依赖:

<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-transport-native-epoll</artifactId>
    <version>${netty.version}</version>
    <classifier>${epoll.os}</classifier>
</dependency>
Run Code Online (Sandbox Code Playgroud)

此依赖项的自动生成的模块名称为:

netty.transport.native.epoll
Run Code Online (Sandbox Code Playgroud)

由于native关键字是在Java 9中保留的,我无法将此模块作为依赖项添加到我的项目中:

module core {
    requires netty.transport.native.epoll;
}
Run Code Online (Sandbox Code Playgroud)

由于:

module not found: netty.transport.<error>
Run Code Online (Sandbox Code Playgroud)

此外,jar工具--describe-module报告以下内容:

无法导出模块描述符:网状输送本地-epoll的-4.1.17.Final-快照Linux的x86_64.jar netty.transport.native.epoll:无效的模块名称:"天然"是不是Java标识符

有没有解决方法?(当然,除了"发布正确的网络工件").

编辑:

作为维护者的快速修复 - 您可以添加下一行来构建:

<manifestEntries>
   <Automatic-Module-Name>netty.transport.epoll</Automatic-Module-Name>
</manifestEntries>
Run Code Online (Sandbox Code Playgroud)

java netty java-9 java-module module-info

19
推荐指数
1
解决办法
6923
查看次数

需求和模块声明中需要静态之间的区别是什么

需求需要模块声明中的静态模块语句有什么区别?

例如:

module bar {
    requires java.compiler;
    requires static java.base;
}
Run Code Online (Sandbox Code Playgroud)

java java-9 java-module module-info

18
推荐指数
2
解决办法
1931
查看次数

Java 9中是否可以使用循环模块依赖?

在Java 9中,是否允许使用循环模块?如果不是,原因是什么?

module com.foo.bar {
    requires com.foo.baz;
    exports com.foo.bar.fizz;
}

module com.foo.baz {
    requires com.foo.bar;
    exports com.foo.baz.buzz;
}
Run Code Online (Sandbox Code Playgroud)

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

17
推荐指数
1
解决办法
1025
查看次数

为什么不允许导出整个模块?

在Java 9的模块声明中有2个结构:

exports com.foo;
Run Code Online (Sandbox Code Playgroud)

opens com.foo;
Run Code Online (Sandbox Code Playgroud)

exports赠款编译时访问,同时opens允许运行时访问,如反射和资源.

opens有一个宽容exports,你可以将整个模块定义为open,结果与显式打开每个包相同:

open module com.mod {
Run Code Online (Sandbox Code Playgroud)

但是没有相似的结构

exported module com.mod {
Run Code Online (Sandbox Code Playgroud)

我的问题:为什么会这样; 有什么决定允许一次打开整个模块而不是出口?

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

15
推荐指数
1
解决办法
758
查看次数

Java9中的Synthetic和Mandated Modifier有什么区别

java doc中的ModifierforExports表明了这一点

MANDATED 导出在模块声明的源中隐式声明.

SYNTHETIC 未在模块声明的源中显式或隐式声明导出.

看几个module-info.classes,我可以看到通常有两种类型的用法:

module java.base {
    ...
    exports java.util; // type 1
    exports java.util.concurrent;
    exports java.util.concurrent.atomic;
    exports jdk.internal to jdk.jfr; // type 2
    exports jdk.internal.jmod to
        jdk.compiler,
        jdk.jlink;
    ...
}
Run Code Online (Sandbox Code Playgroud)

合格的出口做介绍这两种,但没有对枚举类型没有提及.这些是文档中提到的不同类型吗?

Q1.一般来说SYNTHETICMANDATED作为在使用调节剂Exports,ModuleDescriptor,OpensRequires.这两者之间的区别是什么,在实践中优于另一个?

Q2.Synthetic Modifier如果没有在模块的源代码中声明,那么无论如何都是一个例子?

java java-9 java-module module-info

15
推荐指数
1
解决办法
698
查看次数

无法从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万
查看次数