标签: java-module

如何解决名称不符合 java 9 模块系统的 Maven 依赖项?

我正在尝试使用 maven 在 java 9 中构建一个使用依赖项的演示项目:

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-mllib_2.10</artifactId>
    <version>2.2.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

但是,当我运行 jar 工具来确定要在项目的 module-info.java 中使用的自动模块名称时,出现以下错误:

$ jar --file=spark-mllib_2.10/2.2.0/spark-mllib_2.10-2.2.0.jar --describe-module
Unable to derive module descriptor for: spark-mllib_2.10/2.2.0/spark-mllib_2.10-2.2.0.jar
spark.mllib.2.10: Invalid module name: '2' is not a Java identifier
Run Code Online (Sandbox Code Playgroud)

看来自动模块算法无法为该 jar 提供有效的 java 名称。如果没有添加正确的需求,我会收到 Spark mllib 中缺少软件包的编译错误,例如:

package org.apache.spark.mllib.linalg does not exist
Run Code Online (Sandbox Code Playgroud)

在添加官方保留模块名称或其自己的模块信息之前,我是否可以在项目中使用此依赖项?

java maven java-9 apache-spark-mllib java-module

5
推荐指数
1
解决办法
1238
查看次数

在 java 9 中从模块类调用非模块类

我试图从模块类调用非模块类。我创建了一个文件夹结构

moduledemo > allclasses > moduleC > packageC > MyMethods.class
Run Code Online (Sandbox Code Playgroud)

是我的模块类文件的路径

moduledemo > moduleC > packageC > MyMethods.java 
Run Code Online (Sandbox Code Playgroud)

moduledemo > nomodule > packageD > DemoNoModule.class
Run Code Online (Sandbox Code Playgroud)

是我调用的无模块类MyMethods.java

我能够编译 DemoNoModule 文件。我能够将 MyMethods.java 编译到 allclasses 文件夹中moduleC

当我运行 MyMethods 时,出现错误moduleC not found。有人可以更新吗?我正在使用以下命令来运行

java --module-path allclasses -m moduleC/packageC.MyMethods
Run Code Online (Sandbox Code Playgroud)

两个文件代码 -> 非模块类

package packageD;

public class DemoNoModule {
    public void showD() {
        System.out.println("this is show of D in No Module");
    }
}
Run Code Online (Sandbox Code Playgroud)

模块类调用类

package packageC;
import packageD.*;

public class MyMethods …
Run Code Online (Sandbox Code Playgroud)

java java-9 java-module

5
推荐指数
1
解决办法
2632
查看次数

如何将 --patch-module 与 --class-path 一起使用 | javac

java.util.regex.Matcher在覆盖本机类(例如在非模块化代码库中)时,如何使用自定义类路径。

基本上我想做的是使用不同的类路径,就像--class-path build/custom修补类时一样。因为修改后的 Matcher.java 引用了编译为build/custom.

IE:

假设我已经修改了java.util.regex.Matcher,现在它需要一些其他(非 java)external.jar 才能运行。

那么我怎样才能像这样修补它: javac --patch-module java.base=src,以便它也找到 external.jar 中的类。

原案

目录结构:

+- build  
+- src
     +- PATCH
          +- java
             +- util
                +- regex
                      +- Matcher.java

     +- CUSTOM
          +- com
             +- example
                  +- MyClass.java
Run Code Online (Sandbox Code Playgroud)

两个类如下:

java.util.regex.Matcher:

package java.util.regex;

class Matcher {
        com.example.MyClass myClass;
}
Run Code Online (Sandbox Code Playgroud)

com.example.MyClass:

package com.example;    

public class MyClass {
}
Run Code Online (Sandbox Code Playgroud)

情况1

这有效:

javac -d build src/CUSTOM/com/example/MyClass.java
javac -d build --patch-module java.base=src src/PATCH/java/util/regex/Matcher.java
Run Code Online (Sandbox Code Playgroud)

案例#2

但是如果我将 MyClass …

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

5
推荐指数
0
解决办法
5319
查看次数

如何将 launch4j 与 Java 自定义运行时映像一起使用?

是否可以Launch4j使用模块化 Java 应用程序制作捆绑/包装 exe 文件?

该应用程序是模块化(jmods),与出口jlink,它不产生任何广口瓶,但custom runtime image与运行命令一个bat文件(几个文件夹):java -m package/path.to.class

我读了Launch4j docs,它说 jar 标签是可选的。尝试将程序与 gui(它甚至没有启用“运行”按钮)和 Windows cmd(launch4j:应用程序 jar 不存在。)一起使用。

编辑1:

这个SO帖子与我的问题有关。Launch4j 还没有这个功能。

解决方案(直到没有其他工具能够这样做):

java launch4j jlink java-9 java-module

5
推荐指数
1
解决办法
886
查看次数

Gradle 构建 - 添加模块路径

我的问题:如何设置模块路径gradle build

我已经习惯从命令行使用 Java 模块了。我经常在 Powershell 中进行练习,从而生成这些源文件。

????src
    ????appMod
    ?   ?   module-info.java
    ?   ?
    ?   ????appPack
    ?           Entry.java
    ?
    ????greetMod
        ?   module-info.java
        ?
        ????greetPack
                Hello.java
Run Code Online (Sandbox Code Playgroud)

appMod/模块信息

module appMod {
    requires greetMod;
}
Run Code Online (Sandbox Code Playgroud)

appMod/appPack.Entry

package appPack;

import greetPack.Hello;

public class Entry {
    public static void main(String[] args) {
        System.out.println(new Hello().sayHello());
    }
}
Run Code Online (Sandbox Code Playgroud)

问候Mod/模块信息

module greetMod {
    exports greetPack;
}
Run Code Online (Sandbox Code Playgroud)

greetMod/greetPack.Hello

package greetPack;

public class Hello {
    public String sayHello() {
        return "Greetings from Hello class!";
    }
}
Run Code Online (Sandbox Code Playgroud)

由于appMod 模块需要greetMod,所以我先编译并jar …

java command-line dependencies gradle java-module

5
推荐指数
1
解决办法
4457
查看次数

使用 Maven 模型时的 Java 11 未命名模块问题

所以,我正在尝试将一个工具从 Java 8 迁移到 Java 11。
我做了第一步,让它在没有模块情况下工作并且代码成功编译。

现在我正在尝试添加 module-info.java,但由于我的工具中使用的库,我首先遇到了问题。有些已经与 Java 11(例如 Lombok)兼容,但有些则不兼容,因此我尝试使用requires和 artifactId 名称导入它们。
但是由于我的 Maven 模型和 Maven 模型构建器依赖性,我似乎卡住了,因为我在构建时遇到以下错误:

[ERROR] the unnamed module reads package org.apache.maven.model.merge from both maven.model.builder and maven.model
[ERROR] module maven.model.builder reads package org.apache.maven.model.merge from both maven.model.builder and maven.model
[ERROR] module maven.model reads package org.apache.maven.model.merge from both maven.model.builder and maven.model
Run Code Online (Sandbox Code Playgroud)

对于这种错误,我该怎么办?似乎我需要两者(如果我评论一个或另一个,构建仍然失败)。这是否意味着我无法将模块添加到我的工具中?
注意:库设置为最新版本(即 3.6.3)

java java-module java-11

5
推荐指数
1
解决办法
363
查看次数

Java 9 中 2 个依赖项中的 SLF4J

我正在为该应用程序开发一个应用程序(https://github.com/stirante/RuneChanger)和一个库(https://github.com/stirante/lol-client-java-api)。在库中,我使用 Java-WebSocket,它最近添加了 SLF4J API。在应用程序中,我有 logback 作为依赖项,它也有 SLF4J 作为依赖项。

在编译应用程序时,我有这样的错误:

[ERROR] the unnamed module reads package org.slf4j.spi from both slf4j.api and lol.client.java.api
[ERROR] the unnamed module reads package org.slf4j from both slf4j.api and lol.client.java.api
[ERROR] the unnamed module reads package org.slf4j.helpers from both slf4j.api and lol.client.java.api
[ERROR] the unnamed module reads package org.slf4j.event from both slf4j.api and lol.client.java.api
Run Code Online (Sandbox Code Playgroud)

完整日志在这里:https : //travis-ci.org/github/stirante/RuneChanger/builds/693607053

我尝试移动库中的依赖项(https://github.com/stirante/lol-client-java-api/commit/f62c31f02ace86d50546af113a94fa37f814fb98),但没有运气。

我该如何处理这种情况?

编辑:暂时我转移org.slf4j到另一个包并且它可以工作,但它看起来像一个丑陋的解决方案,因为日志记录可能无法从这个库中工作。

java slf4j maven java-9 java-module

5
推荐指数
0
解决办法
109
查看次数

如何从非模块化依赖项的 GAV 坐标中编写 module-info requires 语句?

我正在将旧的 Java 应用程序转换为模块化的应用程序。它是一个 Gradle 项目,依赖项如下所示:

dependencies {
    implementation 'org.jopendocument:jOpenDocument:1.3'
    implementation 'xom:xom:1.3.2'
}
Run Code Online (Sandbox Code Playgroud)

在 App 类中,我的导入是:

dependencies {
    implementation 'org.jopendocument:jOpenDocument:1.3'
    implementation 'xom:xom:1.3.2'
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个 module-info.java 文件。但是当我这样做时,我的应用程序将无法编译,因为requiresmodule-info 文件中的指令是错误的。

import nu.xom.Document;
import nu.xom.Element;
import nu.xom.Serializer;
import org.jopendocument.dom.spreadsheet.MutableCell;
import org.jopendocument.dom.spreadsheet.Sheet;
import org.jopendocument.dom.spreadsheet.SpreadSheet;
Run Code Online (Sandbox Code Playgroud)

模块名称xomjOpenDocument不足。但是我不知道这些依赖项应该是什么,也不知道如何重新配置​​ Gradle;如果那是我需要做的。

当我省略任一requires语句时,相应的imports 无法解析。我没有查看 JAR 文件。但我不认为任何一个工件是模块化的。

我正在使用 Gradle 5.6.2,我的目标是 Java 11。

java java-platform-module-system java-module module-info java-11

5
推荐指数
0
解决办法
115
查看次数

退出代码:1 - javadoc:错误 - 被记录的代码使用模块,但......在未命名的模块中

本地 Java 版本是:

java version "11.0.7" 2020-04-14 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.7+8-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.7+8-LTS, mixed mode)
Run Code Online (Sandbox Code Playgroud)

但我的项目有 Java 版本:

<java.version>1.8</java.version>
Run Code Online (Sandbox Code Playgroud)

在构建过程中,我收到一个错误:

Exit code: 1 - javadoc: error - The code being documented uses modules but the packages defined in https://docs.oracle.com/javase/8/docs/api/ are in the unnamed module.
Run Code Online (Sandbox Code Playgroud)

如何在不将 pom 的 Java 版本更改为 Java 11 或降级到 Java 8 的情况下解决?

java javadoc java-8 java-module java-11

5
推荐指数
2
解决办法
1643
查看次数

xjc 和 java 11:如何启用剧集插件?

我使用的命令行XJCjaxb-ri 2.3.3Maven构件
https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-ri/2.3.3/jaxb-ri-2.3.3。邮编)。

似乎无法加载剧集插件(更准确地说,ServiceLoader在 xjc 的插件架构中的幕后使用的根本找不到它):

unrecognized parameter -episode
Run Code Online (Sandbox Code Playgroud)

在 linux 和 windows 上的 openjdk-11.0.2 上进行了测试。

需要做些什么来解决这个问题?谢谢!

java jaxb xjc java-module java-11

5
推荐指数
1
解决办法
212
查看次数