Создайте артефакт с предоставленной зависимостью, затем выберите и укажите его из командной строки - PullRequest
0 голосов
/ 28 апреля 2018

У меня 3 maven модуля:

  1. ядро ​​
  2. данные
  3. данных DEV

ядро ​​ имеет зависимость:

<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 внутри data содержит простую строку "Hello World".
  • data.txt внутри data-dev содержит другую строку "hello dev".

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 file.

Но я не могу найти рабочее решение. Как правильно реализовать эту идею и запустить файл JAR из командной строки?

1 Ответ

0 голосов
/ 29 апреля 2018

Я не вижу никакой ценности в предоставлении статических ресурсов как зависимости пути к классу исполняемого файла 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 .

...