我有3个maven模块:
core 具有依赖关系:
<dependency>
<groupId>test</groupId>
<artifactId>data</artifactId>
<scope>provided</scope>
<version>1.0-SNAPSHOT</version>
</dependency>
数据和 data-dev 由单个文件组成: test.txt ,位于 test.data 两个模块中的包。 (这是第一个问题:构建具有不同名称但具有相同包结构的2个工件是一个好主意吗?)
core 模块像资源一样加载data.txt,并将文件中的字符串输出到system.out,如下所示:
InputStream is = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("test/data/data.txt");
if (is == null) {
System.out.println("No Resource");
return;
}
BufferedReader br = new BufferedReader(new InputStreamReader(is));
System.out.println(br.readLine());
我的想法是从命令行提供 data.jar 或 data-dev.jar 来运行 core.jar 另一个版本的 data.txt 文件。
但我找不到有效的解决方案。 实现这个想法并从命令行运行jar文件的正确方法是什么?
答案 0 :(得分:0)
我认为在您的情况下提供静态资源作为runnable jar的类路径依赖关系没有任何价值。只需将文件名作为命令行参数传递即可。所以你要么把它当作:
java -jar core.jar -Ddata=data.txt
或作为:
java -jar core.jar -Ddata=data-dev.txt
取决于环境,然后执行:
String filename = System.getProperty("data");
InputStream is = new FileInputStream(filename);
BufferedReader br = new BufferedReader(new InputStreamReader(is));
System.out.println(br.readLine());
如果您确实希望将此数据打包到jar文件中,那么您也可以在运行时使用java.util.jar API将其解压缩。