2016-05-05 2 views
2

Мне нужно скопировать файл ресурсов (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] ------------------------------------------------------------------------ 
+0

- это menu.xml непосредственно в корне зависимой банки? У вас есть эта банка в списке зависимостей? Вы пробовали что-то вроде **/menu.xml, как указано в документации https://maven.apache.org/plugins/maven-dependency-plugin/unpack-dependencies-mojo.html#includes, и если вы загрузите файл от пути к классу в любом случае, просто распакуйте его вообще? – wemu

+0

Зачем вам это нужно? Вам не нужно это делать. Если ресурс находится в корне JAR в пути к классам, он находится в корне вашего пути к классам, поэтому то, что вы «хотите», не имеет абсолютно никакой цели. Следовательно: что вы вообще делаете? Какова реальная проблема, которую вы хотите решить? – Tunaki

+0

Да, файл находится в корне зависимой банки. Теперь я понял этот вопрос.Банкомат не находится в списке зависимостей. Путаница началась, потому что я сначала попробовал ** unpack ** цель плагина, который загружает банку из хранилища, которая хорошо работала. Однако в этом случае я не могу использовать файл для тестов, потому что это происходит на более позднем этапе жизненного цикла. Думаю, мне придется вернуться к предыдущему решению, которое копировало файл из исходной папки другого проекта, используя плагин maven-resources. – Alex

ответ

7

После некоторой помощи комментариев я мог бы выяснить проблему. Ящик, содержащий файл menu.xml, не находится в списке зависимостей моего проекта.

Вот лучшее объяснение того, что я пытался добиться для лучшего понимания:

Моего проекта находится внутри Maven несколько модулей, и мне нужна информация о данном menu.xml, которая поддерживается на другой проект один и тот же мультимодуль. Помимо этого файла нет никакой другой зависимости от этого другого проекта, поэтому в jar также нет зависимости от maven.

Во избежание дублирования файла в моем проекте я до сих пор помогал с плагином maven-resources, который копирует файл из исходного каталога другого проекта. Мне никогда не нравилось это решение, потому что оно зависит от источника этого другого проекта в файловой системе.

<plugin> 
    <artifactId>maven-resources-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>copy-resources</id> 
     <phase>validate</phase> 
     <goals> 
      <goal>copy-resources</goal> 
     </goals> 
     <configuration> 
      <outputDirectory>${project.basedir}/src/main/resources</outputDirectory> 
      <resources>   
      <resource> 
       <directory>${project.basedir}/../pm1-jJar/src/main/resources</directory> 
       <includes> 
       <include>menu.xml</include> 
       </includes> 
      </resource> 
      </resources>    
     </configuration>    
     </execution> 
    </executions> 
    </plugin> 

I discovered the maven-depency-plugin Тогда и распаковывать цель, которая может извлечь файл из скаченного баночку из хранилища. Это выглядело как более чистое решение. Я попробовал, и все получилось хорошо. Проблема с этим решением заключалась в том, что плагин unpack работает только на более поздней фазе maven после тестирования, и у меня также есть некоторые тесты с использованием этого файла.

После еще некоторых исследований, я нашел плагин ресурса зависимостей с распакованными зависимостями целью, которая выглядела как идеальное решение, но на данном этапе я совершенно забыл, что я на самом деле не имею зависимости к банке ,

+0

Внимательно изучите maven-remote-resources-plugin, который точно справляется с такими ситуациями ... – khmarbaise