simple example using Project Jigsaw
在Java11.0.1中,在Ubuntu18.04上使用OracleJDK11构建。
在这个例子之后,我创建了一个简单的项目,它编译成一个模块,将模块打包成一个jar,然后使用
jlink
.:
build.sh src
./src:
com module-info.java
./src/com:
greetings
./src/com/greetings:
Main.java
src/com/greetings/Main.java
package com.greetings;
public class Main {
public static void main(String[] args) {
System.out.println("Greetings!");
}
}
src/module-info.java文件
module com.greetings { }
生成.sh
#/bin/bash
#clean up from last build
rm -rf greetingsapp mlib mods
#compile
javac -d mods/com.greetings src/module-info.java src/com/greetings/Main.java
#Make module jar
mkdir mlib
jar --create --file=mlib/com.greetings.jar --main-class=com.greetings.Main -C mods/com.greetings .
#build distribution
jlink --module-path /usr/lib/jvm/java-11-oracle/jmods/:mlib --add-modules com.greetings --output greetingsapp --strip-debug --no-header-files --no-man-pages --launcher greetings=com.greetings
#run
greetingsapp/bin/greetings
所有这些都有效。现在问题来了:
接下来我要做的是使用一个外部库,所以我在Main.java中添加了几行代码:
Main.java-已更新
package com.greetings;
import org.apache.commons.cli.CommandLine; //new line
public class Main {
CommandLine line; //new line
public static void main(String[] args) {
System.out.println("Greetings!");
}
}
然后我把
commons-cli-1.4.jar
在一个名为
lib
创建了此文件结构:
.:
build.sh lib src
./lib:
commons-cli-1.4.jar
./src:
com module-info.java
./src/com:
greetings
./src/com/greetings:
Main.java
我修改了编译行,将commons jar包含在类路径中:
javac -cp lib/commons-cli-1.4.jar:. \
-d mods/com.greetings \
src/module-info.java src/com/greetings/Main.java
src/com/greetings/Main.java:10: error: package org.apache.commons.cli is not visible
import org.apache.commons.cli.CommandLine;
^
(package org.apache.commons.cli is declared in the unnamed module, but module org.apache.commons.cli does not read it)
1 error
如何修改我的项目,以便根据commons-cli-1.4.jar进行编译
?
Edit,在用户nullpointer的建议下,我尝试将-cp标志更改为-p标志,因此将外部jar添加到模块路径中。不幸的是,这也行不通。下面是我尝试过的各种javac命令,它们也不起作用:
javac -p lib -d mods/com.greetings \
src/module-info.java src/com/greetings/Main.java
javac --module-path=lib -d mods/com.greetings \
src/module-info.java src/com/greetings/Main.java
javac -p lib/commons-cli-1.4.jar -d mods/com.greetings \
src/module-info.java src/com/greetings/Main.java