java - 使用提供的依赖项构建工件,然后从命令行选择并指定它
问题描述
我有 3 个 Maven 模块:
- 核
- 数据
- 数据开发
核心有一个依赖:
<dependency>
<groupId>test</groupId>
<artifactId>data</artifactId>
<scope>provided</scope>
<version>1.0-SNAPSHOT</version>
</dependency>
data和data-dev由一个文件组成:test.txt,位于两个模块的test.data包中。(这是第一个问题:构建 2 个名称不同但包结构相同的工件是否是个好主意?)
- data.txt里面的数据有一个简单的字符串“hello world”。
- data-dev中的data.txt有一个不同的字符串“hello dev”。
核心模块像资源一样加载 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以使用一个或另一个版本的data.txt文件运行core.jar 。
但我找不到有效的解决方案。实现这个想法并从命令行运行 jar 文件的正确方法是什么?
解决方案
在您的情况下,我认为提供静态资源作为可运行 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解压它。
推荐阅读
- core-data - 在哪里存储持久容器(或任何全局对象)?AppDelegate 还是场景委托?
- mysql - 是否有一个 MySQL 查询来查找多个字段的最佳匹配?
- php - 如何将html href按钮放在php代码中
- gradle - 使实现依赖在另一个子模块中可用
- python - Python端口扫描器在使用for循环和范围函数时将每个端口标记为关闭
- signal-processing - 负幅值的快速傅里叶变换
- python-3.x - 读取文件并计算python中列中的单词
- angular - 如何根据一个select选项确定剩下的select需要绑定的值?
- c - 使用管道,从父进程中读取 2 个数字,子进程计算它们的总和并为父进程提供打印结果
- mongodb - 在Mongodb中,主键(IDHACK)和辅助键(IXSCAN)的工作流程有什么区别?