【问题标题】:How to add a non-modular Maven dependency to the module path as an automatic module? [duplicate]如何将非模块化 Maven 依赖项作为自动模块添加到模块路径? [复制]
【发布时间】:2020-09-17 23:02:39
【问题描述】:

假设我们想要构建一个简单的 Java 11 模块化 Maven 项目,该项目具有单个非模块化依赖项 org.json:json(为了实际示例而随机选择)。

项目结构:

project
|-- pom.xml
`-- src
    `-- main
        `-- java
            |-- foo.bar.project
            |   `-- foo
            |       `-- bar
            |           `-- project
            |               `-- Foo.java
            `-- module-info.java

Foo.java

package foo.bar.project;

import org.json.JSONObject;

public class Foo {
    static JSONObject o = new JSONObject();
}

module-info.java

module foo.bar.project {
}

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>foo.bar</groupId>
  <artifactId>project</artifactId>
  <version>1.0-SNAPSHOT</version>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.release>11</maven.compiler.release>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.json</groupId>
      <artifactId>json</artifactId>
      <version>20200518</version>
    </dependency>
  </dependencies>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.1</version>
          <executions>
            <execution>
                <goals>
                    <goal>compile</goal>
                </goals>
                <id>compile</id>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

我的问题是如何告诉 Maven 将 org.json 作为一个自动模块放在模块路径上。默认情况下,Maven 将非模块化 jar 放在 classpath 上作为未命名的模块

就目前而言,运行 mvn clean compile 失败:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project project: Compilation failure
[ERROR] <PathToProject>/src/main/java/foo.bar.project/foo/bar/project/Foo.java:[3,11] package org.json is not visible
[ERROR]   (package org.json is declared in the unnamed module, but module org.json does not read it)
[ERROR]
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

系统信息:

Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-24T20:41:47+02:00)
Maven home: C:\Tools\apache-maven-3.6.0
Java version: 11.0.1, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk-11.0.1
Default locale: sl_SI, platform encoding: UTF8
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

【问题讨论】:

    标签: java maven java-platform-module-system org.json


    【解决方案1】:

    我找到消息

    [ERROR](包 org.json 在未命名的模块中声明,但是 org.json 模块不读取)

    奇怪,它应该读过“..但是模块foo.bar.project没有读过它”

    那么你会发现你需要在module-info.java中放置一个指令比如:

    requires org.json;
    

    【讨论】:

    • 虽然我使用apache-maven-3.6.3JDK 14-ea 来重现您分享的问题。
    • 我已经仔细检查了我的错误信息,我确信没有错字。不过,您的解决方案仍然有效,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 2020-09-30
    • 2015-02-20
    • 2011-07-31
    相关资源
    最近更新 更多