Мне нужно скопировать файл ресурсов (menu.xml) из корня зависимого файла jar в корневую директорию вывода моего текущего проекта, прежде чем тесты будут выполнены во время сборки. Файл должен быть доступен для тестов, а также позже для основной программы, используя ...getClassLoader().getResourceAsStream("menu.xml")
.maven: копировать ресурс из зависимой jar в целевую папку
Я пытаюсь найти решение, предложенное в this question, но оно не работает.
Это как файл ПОМ выглядит следующим образом:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>resource-dependencies</id>
<phase>process-test-resources</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<type>jar</type>
<includeArtifactIds>pm1j-jar</includeArtifactIds>
<includes>menu.xml</includes>
<outputDirectory>${project.build.outputDirectory}</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
Когда я исполняю mvn clean process-test-resources
я вижу следующий вывод:
[INFO] --- maven-resources-plugin:2.7:testResources (default-testResources) @ pm1-config ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 3 resources
[INFO]
[INFO] --- maven-dependency-plugin:2.8:unpack-dependencies (resource-dependencies) @ pm1-config ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.709 s
[INFO] Finished at: 2016-05-05T15:01:06-03:00
[INFO] Final Memory: 30M/458M
[INFO] ------------------------------------------------------------------------
Файл menu.xml не копируется в целевую папку. Как я могу увидеть, что может быть неправильным? Я попытался запустить maven на уровне журнала отладки и мог видеть, что конфигурация была проанализирована правильно, но плагин не регистрирует никаких дополнительных сведений о том, что происходит.
...
[DEBUG] (f) includeArtifactIds = pm1j-jar
[DEBUG] (s) includes = menu.xml
...
[DEBUG] (f) outputAbsoluteArtifactFilename = false
[DEBUG] (s) outputDirectory = c:\Dev\workspaces\config\pm1j\pm1-config\target\classes
...
[DEBUG] (f) project = MavenProject: com.expersoft.pm1j:pm1-config:3-SNAPSHOT @ c:\Dev\workspaces\config\pm1j\pm1-config\
pom.xml
[DEBUG] -- end configuration --
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 10.014 s
[INFO] Finished at: 2016-05-05T15:09:29-03:00
[INFO] Final Memory: 27M/328M
[INFO] ------------------------------------------------------------------------
- это menu.xml непосредственно в корне зависимой банки? У вас есть эта банка в списке зависимостей? Вы пробовали что-то вроде **/menu.xml, как указано в документации https://maven.apache.org/plugins/maven-dependency-plugin/unpack-dependencies-mojo.html#includes, и если вы загрузите файл от пути к классу в любом случае, просто распакуйте его вообще? – wemu
Зачем вам это нужно? Вам не нужно это делать. Если ресурс находится в корне JAR в пути к классам, он находится в корне вашего пути к классам, поэтому то, что вы «хотите», не имеет абсолютно никакой цели. Следовательно: что вы вообще делаете? Какова реальная проблема, которую вы хотите решить? – Tunaki
Да, файл находится в корне зависимой банки. Теперь я понял этот вопрос.Банкомат не находится в списке зависимостей. Путаница началась, потому что я сначала попробовал ** unpack ** цель плагина, который загружает банку из хранилища, которая хорошо работала. Однако в этом случае я не могу использовать файл для тестов, потому что это происходит на более позднем этапе жизненного цикла. Думаю, мне придется вернуться к предыдущему решению, которое копировало файл из исходной папки другого проекта, используя плагин maven-resources. – Alex