标签: java-module

Javadoc如何处理Java 9中模块的可见性?

Javadoc工具基于可访问性修饰符生成文档.默认情况下,它记录所有publicprotected类,字段和方法.可以使用以下选项更改此设置:

-public
仅显示公共类和成员.

-protected
仅显示受保护的公共类和成员.这是默认值.

-package
仅显示包,受保护和公共类和成员.

-private
显示所有类和成员.

Java 9引入了模块的概念,项目Jigsaw将其应用于现有的JDK.一马克莱因霍尔德(在一系列有关模块会谈3日)显示了如何public修改目前已拥有不同级别的可访问的,这取决于模块(通过可见性exports):

  • 公开给大家
  • 公开但仅限于特定模块
  • 仅在模块内公开

由于现在并非所有公共成员都可以访问,因此继续使用相同的Javadoc生成方案将没有多大意义.只有那些暴露在"足够"水平的成员才应该被记录下来.

Javadoc模块是否可识别?除了上面的命令选项还有处理额外曝光层的命令选项吗?对于仅暴露给特定模块的公共成员,Javadoc是否列出了这些,如

public <module1, module2> static void getDefaultThing()
Run Code Online (Sandbox Code Playgroud)

java javadoc java-platform-module-system java-9 java-module

23
推荐指数
1
解决办法
852
查看次数

什么是自动模块?

在stackoverflow上多次提到自动模块,但我找不到自动模块的完整,简洁和自给自足的定义.

那么,什么是自动模块?它是否导出所有包裹?它打开所有包裹吗?它是否读取所有其他模块?

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

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

由于它们位于加载程序“ app”的未命名模块中,因此无法转换为类

我正在尝试从生成的源创建一个bean wsdl2java

每次我尝试运行Spring Boot应用程序时,都会出现以下错误:

造成原因:java.lang.ClassCastException:org.apache.cxf.endpoint.ClientImpl类无法转换为com.xignite.services.XigniteCurrenciesSoap类(org.apache.cxf.endpoint.ClientImpl和com.xignite.services.XigniteCurrenciesSoap是在加载程序“ app”的未命名模块中)

我不确定我到底如何将生成的源作为模块包含在主Spring Boot应用程序中。

我的目录结构是:

??? build
?   ??? generatedsources
?       ??? src
?           ??? main
?               ??? java
?                   ??? com
?                       ??? xignite
?                           ??? services
?      
??? src
    ??? main
        ??? java
        ?   ??? io
        ?       ??? mateo
        ?           ??? stackoverflow
        ?               ??? soapconsumption
        ??? resources
           ??? wsdls
Run Code Online (Sandbox Code Playgroud)

相关系统信息:

openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)
Run Code Online (Sandbox Code Playgroud)
  • Spring Boot 2.1.2发布
  • 摇篮5.2 …

java spring-boot java-9 java-module

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

在IntelliJ IDEA 2017.2.1中无法使用--patch-module编译Java 9模块

我试图熟悉Java 9模块以及如何在IntelliJ中定义它们.除此之外,我想使用--patch-module编译器/ JVM标志解决拆分包问题,我不知道如何使它在IntelliJ中工作.

我正在使用IntelliJ IDEA 2017.2.1使用Java HotSpot(TM)64位服务器VM构建#IC 172.3544.35(内置9 + 180,混合模式).

这是我的源文件MyImmutableList.java:

package com.google.common.collect;

public class MyImmutableList extends RegularImmutableList {
  public MyImmutableList(Object[] array) {
    super(array);     
  }
}
Run Code Online (Sandbox Code Playgroud)

它属于我的模块com.effjava.collectmodule-info.java:

module com.effjava.collect {
    // do not require module guava; instead patch this module with guava.19-0.jar via:
    // javac --patch-module com.effjava.collect=guava-19.0.jar module-info.java com/google/common/collect/MyImmutableList.java
    //    requires guava;        
    exports com.google.common.collect;
}
Run Code Online (Sandbox Code Playgroud)

为了编译我的模块,我--patch-module使用Settings=> Build,Execution,Deplyoment=> Compiler=> 在IntelliJ中指定了标志,Shared build process VM options如此处所述 …

java intellij-idea java-platform-module-system java-9 java-module

21
推荐指数
1
解决办法
2025
查看次数

如何为名称中带有" - "(连字符)的工件添加"要求"

我在Maven pom.xml中包含了这些依赖项:

 <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>${httpclient.version}</version>
</dependency>

<dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.4</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我试图在module-info.java中添加这种依赖,如下所示:

module io.github.wildcraft.restclient {
    requires httpcore; // no compilation problem
    requires httpclient; // no compilation problem
    requires commons-io; // shows compilation error
}
Run Code Online (Sandbox Code Playgroud)

对于commons-io,我收到编译错误.我怎样才能做到这一点?

java maven java-platform-module-system java-9 java-module

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

什么是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 - "模块"和"JAR"文件有什么区别?

我正在从Java9的What's New中学习Java 9,讨论的热门话题之一是 模块化JDK.

我有些疑惑:

  1. JAR文件是模块吗?
  2. 模块与JAR文件有何不同?

java jar java-9 java-module

21
推荐指数
3
解决办法
5878
查看次数

如何在Java 9中运行时访问javax.annotation.Resource

我有一个测试:

public class ResourceTest {
    @Test
    public void test() throws ClassNotFoundException {
        Class.forName("javax.annotation.Resource");
    }
}
Run Code Online (Sandbox Code Playgroud)

它试图访问javax.annotation.Resource.在java 8中它可以工作,但是在java 9中(我使用的是Oracle JDK 9)它失败了ClassNotFoundException.正如本文所解释的那样:@Resource注入在JDK9下停止工作,javax.annotation.ResourceJDK在Java 9中默认不可用.

我正在尝试使用模块描述符访问它:

module test {
    requires java.xml.ws.annotation;
    requires junit;
}
Run Code Online (Sandbox Code Playgroud)

在这里,我特意请求访问java.xml.ws.annotation模块(包含javax.annotation.Resource).但测试仍然失败.

当我删除该requires子句并添加包含的依赖项(作为库)时javax.annotations.Resource,它可以工作:

    <dependency>
        <groupId>javax.annotation</groupId>
        <artifactId>javax.annotation-api</artifactId>
        <version>1.3.1</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

当我同时添加它们(Maven依赖于pom.xmlrequires java.xml.ws.annotation)时,IDEA中的编译失败,并显示以下消息:

the unnamed module reads package javax.annotation from both java.xml.ws.annotation and java.annotation
Run Code Online (Sandbox Code Playgroud)

但Maven构建仍然成功!

如果我java.xml.ws.annotation通过命令行添加模块,它可以工作(没有Maven依赖和with requires子句):

mvn clean test …
Run Code Online (Sandbox Code Playgroud)

java java-9 java-module

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

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