Javadoc工具基于可访问性修饰符生成文档.默认情况下,它记录所有public和protected类,字段和方法.可以使用以下选项更改此设置:
-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)
?
在stackoverflow上多次提到自动模块,但我找不到自动模块的完整,简洁和自给自足的定义.
那么,什么是自动模块?它是否导出所有包裹?它打开所有包裹吗?它是否读取所有其他模块?
我正在尝试从生成的源创建一个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)
我试图熟悉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.collect有module-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
我在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,我收到编译错误.我怎样才能做到这一点?
模块与open关键字之前和之后有什么区别?
例如:
open module foo {
}
module foo {
}
Run Code Online (Sandbox Code Playgroud) 我有一个测试:
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.xml和requires 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) 我的项目依赖于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) 需求和需要模块声明中的静态模块语句有什么区别?
例如:
module bar {
requires java.compiler;
requires static java.base;
}
Run Code Online (Sandbox Code Playgroud) java ×10
java-9 ×10
java-module ×10
java-platform-module-system ×4
module-info ×3
jar ×1
javadoc ×1
maven ×1
netty ×1
spring-boot ×1