标签: java-9

Java 9 Module系统是否支持可选的依赖项?

背景

在maven中,工件可以声明依赖关系

<optional>true</optional>
Run Code Online (Sandbox Code Playgroud)

这意味着不需要依赖,但如果存在则可以使用.

模块系统的状态似乎指定模块只能读取它所需的模块.

问题

  • Java 9模块系统确实不支持可选的依赖项吗?
  • 为什么不?
  • Java 9模块系统提供了哪些可选依赖项替代方案?

用例

我有一个框架,集成了应用程序可能使用或不使用的各种库.目前,该框架是一个单独的JAR,它反映了类路径以跳过缺少库的集成代码.

我想我们可以将它分成每个配置的单独模块,但这会导致JAR数量的组合爆炸,因为我们不仅需要为每个可选依赖项单独的JAR,而且对于大多数对都需要单独的JAR可选的依赖项......

java java-platform-module-system java-9

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

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

是否可以在Java 9中动态加载和卸载jdk和自定义模块?

我是JPMS的初学者,无法理解它的活力.例如,在当前的JVM实例中moduleA.jar正在运行.moduleA只需要java.base模块.现在,我想要

  1. 动态加载moduleB.jar需要java.sql模块和moduleC.jar
  2. 执行一些代码 moduleB
  3. 卸载moduleB,java.sql,moduleC从JVM并释放所有资源.

可以在Java 9模块系统中完成吗?

java java-9

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

是否可以在javac(JDK 9)中混合使用--class-path和--module-path?

当我编译一个依赖于我之前编译的其他模块的模块时,我必须指定该--module-path <directory>选项.这使我依赖的模块可见.

但与此同时,我还想让一些非模块化的Jar文件可见.但是,如果不使它们成为自动模块并且只是在--class-path some.jar旁边指定--module-path <directory>,那么javac似乎忽略了claspath并抛出"package yyy not found"和其他"未找到"错误.

我可以理解,使用--class-path--module-path在同一个(编译)时间是非法的,但javac并没有以任何方式警告我.

java classpath java-9 module-path

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

由于它们位于加载程序“ 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万
查看次数

使用Math.fma有哪些准确性和性能优势?

我今天才注意到Math.fma(a, b, c)Java 9 的存在,它计算a*b + c
(for doublefloatvalues).

返回三个参数的融合乘法加法; 也就是说,返回与第三个参数相加的前两个参数的精确乘积,然后将其舍入一次到最近的float.使用舍入到最近的偶数舍入模式完成舍入.相反,如果a*b + c被评估为常规浮点表达式,则涉及两个舍入误差,第一个用于乘法运算,第二个用于加法运算.

因此看起来它通过进行1舍入而不是2来提高准确性.这是正确的吗?那是有条件的CPU的能力,或者我们可以指望的是始终

我猜它可能是使用特殊的CPU指令实现的.是这样的吗?如果是这样,我们还可以期待性能优势吗?我有兴趣了解当前平台/ CPU的实际好处,以及假设的未来收益.

编辑(试图让它变得不那么宽泛):我不是在寻找非常详细的答案:是/否对于纠正/确认我的理解的几个项目,加上一些指示,对我来说就足以标记答案了被接受了.我对准确性和性能方面都非常感兴趣,我认为它们在一起......

java java-9

22
推荐指数
2
解决办法
979
查看次数

String串联是否经过优化以使用现有的StringBuilders?

我有以下代码:

StringBuilder str = new StringBuilder("foo");
for(Field f : fields){
    str.append("|" + f);
}
str.append("|" + bar);
String result = str.toString();
Run Code Online (Sandbox Code Playgroud)

我知道编译器会优化字符串连接"|" + f并用StringBuilder替换它.但是,是否会创建一个新的StringBuilder,或者现有的str将在Java 8中使用?Java 9怎么样?

java performance java-8 java-9

22
推荐指数
2
解决办法
2482
查看次数

WAR文件的Java 9模块化也是如此吗?

Java EE 7应用程序服务器,特别是Servlet 3.1容器应该允许我们部署包含Web应用程序的WAR文件.WAR文件本质上是一个带有部署描述符(web.xml)和其他几个元素的JAR .

另一方面,Java 9引入了模块化JAR文件的概念,即带有模块descriptor(module-info.class)的JAR,它根据项目Jigsaw制作模块.

那么,WAR文件是否也包含模块描述符并制作"模块化WAR文件"?

是否已有应用程序服务器能够接受"模块化WAR文件"的部署?

一般来说,Java 9模块化方面的servlet容器和WAR文件的未来是什么?

java servlets java-9

22
推荐指数
1
解决办法
2768
查看次数

Android SDK管理器使用Java 9抛出异常

sdk-tools-darwin-4333796 (26.1.1)在运行时使用Java 9 sdkmanager抛出:

Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
        at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156)
        at com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75)
        at com.android.sdklib.repository.AndroidSdkHandler.<clinit>(AndroidSdkHandler.java:81)
        at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:73)
        at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
        ... 5 more
Run Code Online (Sandbox Code Playgroud)

java android android-sdk-tools java-9

22
推荐指数
1
解决办法
9384
查看次数

如何在java流中对groupBy应用过滤

如何先分组,然后使用Java流应用过滤?

示例:考虑此类Employee:我希望按部门分组,其中包含薪水大于2000的员工列表.

public class Employee {
    private String department;
    private Integer salary;
    private String name;

    //getter and setter

    public Employee(String department, Integer salary, String name) {
        this.department = department;
        this.salary = salary;
        this.name = name;
    }
}   
Run Code Online (Sandbox Code Playgroud)

这就是我如何做到这一点

List<Employee> list   = new ArrayList<>();
list.add(new Employee("A", 5000, "A1"));
list.add(new Employee("B", 1000, "B1"));
list.add(new Employee("C", 6000, "C1"));
list.add(new Employee("C", 7000, "C2"));

Map<String, List<Employee>> collect = list.stream()
    .filter(e -> e.getSalary() > 2000)
    .collect(Collectors.groupingBy(Employee::getDepartment));  
Run Code Online (Sandbox Code Playgroud)

产量

{A=[Employee [department=A, salary=5000, name=A1]],
 C=[Employee [department=C, …
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream collectors java-9

22
推荐指数
3
解决办法
7307
查看次数