2016-08-26 2 views
1

У меня есть зависимость:Maven как скопировать определенную папку внутри зависимости целевой/классы/моя_папка

<dependency> 
    <groupId>org.webjars</groupId> 
    <artifactId>swagger-ui</artifactId> 
    <version>2.1.4</version> 
</dependency> 

Внутри чванство-щ-2.1.4.jar имеет META-INF/resources/webjars/.
Я хотел бы, чтобы скопировать webjars/папку для target/classes/myfolder

Я прочитал this question и сделайте следующее:

<plugin> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
     <execution> 
      <phase>install</phase> 
      <goals> 
       <goal>copy-dependencies</goal> 
      </goals> 
      <configuration> 
       <includeGroupIds>org.webjars</includeGroupIds> 
       <includeArtifactIds>swagger-ui</includeArtifactIds> 
       <outputDirectory>${project.build.directory}/classes/myfolder</outputDirectory> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Но он копирует swagger-ui-2.1.4.jar к OutputDirectory, который не является конкретно то, что мне нужно.

Вопрос: Есть ли возможное решение?

ответ

1

Вам, скорее всего, не нужен copy-dependencies, но unpack. Для получения дополнительной информации проверьте official example.

Следующий пример:

<plugin> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <version>2.10</version> 
    <executions> 
     <execution> 
      <phase>install</phase> 
      <goals> 
       <goal>unpack</goal> 
      </goals> 
      <configuration> 
       <artifactItems> 
        <artifactItem> 
         <groupId>org.webjars</groupId> 
         <artifactId>swagger-ui</artifactId> 
         <version>2.1.4</version> 
         <type>jar</type> 
         <overWrite>false</overWrite> 
         <outputDirectory>${project.build.directory}/classes/myfolder</outputDirectory> 
         <includes>META-INF/resources/**/*.*</includes> 
        </artifactItem> 
       </artifactItems> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

скопирует под ${project.build.directory}/classes/myfolder содержание META-INF/resources который в основном папка webjars. Однако вы также получите древовидную структуру META-INF/resources.


Для достижения именно ваши намерения (копировать только содержание подкаталоге зависимости в определенной папке), необходимо использовать два плагина: в maven-dependency-plugin и maven-resources-plugin следующим образом:

<plugin> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <version>2.10</version> 
    <executions> 
     <execution> 
      <phase>install</phase> 
      <goals> 
       <goal>unpack</goal> 
      </goals> 
      <configuration> 
       <artifactItems> 
        <artifactItem> 
         <groupId>org.webjars</groupId> 
         <artifactId>swagger-ui</artifactId> 
         <version>2.1.4</version> 
         <type>jar</type> 
         <overWrite>false</overWrite> 
         <outputDirectory>${project.build.directory}/tmp</outputDirectory> 
         <includes>META-INF/resources/**/*.*</includes> 
        </artifactItem> 
       </artifactItems> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <artifactId>maven-resources-plugin</artifactId> 
    <version>3.0.1</version> 
    <executions> 
     <execution> 
      <id>copy-resources</id> 
      <!-- here the phase you need --> 
      <phase>install</phase> 
      <goals> 
       <goal>copy-resources</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>${project.build.directory}/classes/myfolder</outputDirectory> 
       <resources> 
        <resource> 
         <directory>${project.build.directory}/tmp/META-INF/resources</directory> 
        </resource> 
       </resources> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

maven-dependency-plugin скопирует наше искомое дерево каталогов в папку target\tmp, тогда maven-resources-plugin будет копировать только подпапку, которую мы хотим в конечный каталог.

Обратите внимание, что оба плагина будут выполнены во время фазы install, но в их заявлении указывается, что действительно важно иметь окончательный желаемый результат.

+0

Очень хорошее решение. Большое спасибо за ваше время и ответ –

Смежные вопросы