我有以下项目 struct .
ProjectName
|
|---src
|
|---main
|
|---java
| |
| |---ModuleName
| |
| |---module-info.java
| |
| |---PackageName
| |
| |---Main.java
|
|---resources
|
|---ResourceParentFolder
|
|---ResourceSubFolderA
| |
| |---Resource1A.png
| |---Resource2A.png
| |---Resource3A.png
|
|---ResourceSubFolderB
|
|---Resource1B.png
|---Resource2B.png
|---Resource3B.png
我有一个shell 脚本来编译代码,然后运行该代码.
javac \
--module-source-path="src/main/java" \
--module=ModuleName \
-d classes
java \
--module-path="classes;src/main/resources" \
--module=ModuleName/PackageName.Main
我还有一个shell 脚本,可以将编译后的代码转换为模块化JAR,然后运行该JAR.
jar \
--verbose \
--create \
--file run/executable/jar/ProjectName.jar \
--main-class PackageName.Main \
-C classes/ModuleName . \
-C src/main/resources .
java \
--module-path="run/executable/jar" \
--module=ModuleName/PackageName.Main
在我的main方法中,我调用了java.lang.module.ModuleReader
,特别是它的list()方法,它允许我遍历模块及其内容.
如果我使用JAR文件并try 运行它,我可以看到ResourceParentFolder
的内容,但当我只运行编译后的代码时,对list()
的调用只返回.class
个文件.这是因为我的模块配置错误吗?或者这仅仅是不受支持的功能?
同样,当作为JAR运行时,ModuleReader.list()
返回源代码和资源文件夹内容的递归列表,但当作为编译代码运行时,它只返回源代码.如何让编译后的代码也填充ModuleReader.list()
?或者,这只是不支持的功能,除非它是在一个罐子或其他什么?
需要说明的是,我很清楚有100万零1种其他方法可以获取资源.但我想知道是否有可能按照我上面要求的方式来做.如果不是,为什么呢?
编辑--详细介绍我一些失败的try .
我try 将src/main/resources
目录复制到classes
中,这是模块变成JAR之前的位置.不幸的是,它什么也没拿到.
我也试着做--patch-modules
次,但也失败了,但有一个错误.
error: no source files
以下是我使用的命令.
javac --patch-module ModuleName=src/main/resources