我有三个模块 - 一个主要模块和两个依赖项。所有模块都位于同一文件夹级别,并分别组织在文件夹 ./main
、./first
和 ./second
中。
第二模块只有一个类:
package characterz;
public class Freaker {
public void freakOut() {
System.err.println("ARGH!!!#$%@");
}
}
...及其 module-info.java
文件是:
module second {
exports characterz;
}
第一个模块只有一个类:
package characters;
public class Captain {
public void payRespects() {
System.out.println("Presses \"F\" ...");
}
}
...及其 module-info.java
文件是:
module first {
exports characters;
requires transitive second;
}
main模块只有一个类:
package app;
import characters.Captain;
import characterz.Freaker;
public class Main {
public static void main(String... argz) {
Captain cap = new Captain();
Freaker freak = new Freaker();
cap.payRespects();
freak.freakOut();
}
}
...及其 module-info.java
文件是:
module main {
requires first;
}
为了编译这三个模块,我执行以下命令序列:
javac -d 模块/第二 $(查找第二个 -name *.java)
javac -p 模块/第二个 -d 模块/第一个 $(查找第一个 -name *.java)
javac -p 模块/第二:模块/第一 -d 模块/main main/app/Main.java main/module-info.java
...并且编译得很好。为了确保一切正常,我们可以这样运行我们的程序:
java -p 模块 -m main/app.Main
但是如果我尝试在 first 模块中使用 exports... to
指令:
module first {
exports characters to main;
requires transitive second;
}
...然后编译过程开始在编译第一个模块时向我发出警告,并显示以下消息:
first/module-info.java:2: warning: [module] module not found: main
exports characters to main;
^
1 warning
不过它仍然可以编译。然而,在使用 exports... to
指令编译模块时如何避免收到这些警告?
最佳答案
假设您已经这样组织您的项目:
. // current working directoy
|-- src // source code
| |-- first
| |-- second
| |-- main
|-- modules // compiled stuff
|-- first
|-- second
|-- main
然后你可以编译所有模块
javac -d modules --module first,second,main --module-source-path src
来自当前工作目录。
无需跳过几个环节。
关于java - 如何使用 `javac` 指令编译 `exports... to` 模块而不出现任何警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67795589/