问题
你如何创建一个java库jar:
- 是java模块(有
module-info
) - 有一个依赖的遗留(非模块)jar。(如
commons-exec
)?
依赖项是一个实现细节 - 不应导出。
来源
具有以下build.gradle
(使用gradle-6.8
):
plugins {
id 'java-library'
}
group = 'test'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '15'
repositories {
mavenCentral()
}
java {
modularity.inferModulePath = true
}
dependencies {
implementation 'org.apache.commons:commons-exec:1.3'
}
以及以下内容module-info.java
:
module test.module {
requires commons.exec;
}
错误
我收到以下编译错误:
module-info.java:2: error: module not found: commons.exec
requires commons.exec;
^
如果我不包括requires commons.exec
,则错误变为:
error: package org.apache.commons.exec is not visible
import org.apache.commons.exec.CommandLine;
^
(package org.apache.commons.exec is declared in the unnamed module,
but module test.module does not read it)
commons.exec
模块名称?
运行jar --file=commons-exec-1.3.jar --describe-module
确实输出:
No module descriptor found. Derived automatic module.
commons.exec@1.3 automatic
requires java.base mandated
contains org.apache.commons.exec
contains org.apache.commons.exec.environment
contains org.apache.commons.exec.launcher
contains org.apache.commons.exec.util
所以commons.exec
看起来像一个有效的模块名称commons-exec-1.3.jar
。Intelij Idea 似乎同意并在module-info.java
. 虽然它在构建时失败。