我有一个简单的Maven项目:
src
??? main
    ??? java
        ??? module-info.java
pom.xml
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>
当我通过构建项目时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) …需求和需要模块声明中的传递模块语句有什么区别?
例如:
module foo {
    requires java.base;
    requires transitive java.compiler;
}
所以这是我的问题...
我正在使用 maven-shade 插件将 Spring Boot 应用程序打包到 uber jar 中。很简单吧?好吧,除了最近我在结尾处收到以下警告mvn clean package:
[WARNING] Discovered module-info.class. Shading will break its strong encapsulation.
这实际上并没有破坏任何东西,但我是一个完美主义者,这让我发疯了吗?我该如何摆脱它?我尝试了很多东西,但没有成功。
请帮忙 :(
模块与open关键字之前和之后有什么区别?
例如:
open module foo {
}
module foo {
}
我的项目依赖于Netty Epoll传输.这是依赖:
<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-transport-native-epoll</artifactId>
    <version>${netty.version}</version>
    <classifier>${epoll.os}</classifier>
</dependency>
此依赖项的自动生成的模块名称为:
netty.transport.native.epoll
由于native关键字是在Java 9中保留的,我无法将此模块作为依赖项添加到我的项目中:
module core {
    requires netty.transport.native.epoll;
}
由于:
module not found: netty.transport.<error>
此外,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>
需求和需要模块声明中的静态模块语句有什么区别?
例如:
module bar {
    requires java.compiler;
    requires static java.base;
}
在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;
}
java java-platform-module-system java-9 java-module module-info
在Java 9的模块声明中有2个结构:
exports com.foo;
和
opens com.foo;
凡exports赠款编译时访问,同时opens允许运行时访问,如反射和资源.
opens有一个宽容exports,你可以将整个模块定义为open,结果与显式打开每个包相同:
open module com.mod {
但是没有相似的结构
exported module com.mod {
我的问题:为什么会这样; 有什么决定允许一次打开整个模块而不是出口?
java java-platform-module-system java-9 java-module module-info
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;
    ...
}
在合格的出口做介绍这两种,但没有对枚举类型没有提及.这些是文档中提到的不同类型吗?
Q1.一般来说SYNTHETIC和MANDATED作为在使用调节剂Exports,ModuleDescriptor,Opens和Requires.这两者之间的区别是什么,在实践中优于另一个?
Q2.Synthetic Modifier如果没有在模块的源代码中声明,那么无论如何都是一个例子?
使用IDEA-EAP进行JDK9开发实验.
我收到以下错误 -
Run Code Online (Sandbox Code Playgroud)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)
类定义如下 -
package experiment;
import jdk.internal.misc.Unsafe;
public class CompareAndSwap {
    static Unsafe UNSAFE = Unsafe.getUnsafe();
    ...
}
我已经尝试module-info.java在使用IDE创建的模块中包含一个文件,其中包含以下语句 -
module com.jigsaw.npe {
    requires java.base;
}
目录结构现在看起来如图所示 -
IDE虽然反映了module-info.java未使用的,但可能这就是我无法定义module com.jigsaw.npe上面尝试过的原因.
寻求一些帮助,了解如何正确放置module-info.java和/或除了我错过的以外的任何东西.
java java-platform-module-system java-9 java-module module-info
java ×10
module-info ×10
java-9 ×8
java-module ×8
java-platform-module-system ×3
maven ×2
java-10 ×1
java-11 ×1
netty ×1
requires ×1
uberjar ×1