Maven 如何将依赖项中的特定文件夹复制到 target/classes/myfolder
Maven how to copy a specific folder inside a dependency to target/classes/myfolder
我有依赖:
<dependency>
<groupId>org.webjars</groupId>
<artifactId>swagger-ui</artifactId>
<version>2.1.4</version>
</dependency>
内招摇-ui-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,这并不是我所需要的。
问题:有没有可能的解决方案?
您很可能不需要 copy-dependencies
但 unpack
. Check the 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
阶段执行,但它们的声明顺序对于获得最终期望的结果非常重要。
我有依赖:
<dependency>
<groupId>org.webjars</groupId>
<artifactId>swagger-ui</artifactId>
<version>2.1.4</version>
</dependency>
内招摇-ui-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,这并不是我所需要的。
问题:有没有可能的解决方案?
您很可能不需要 copy-dependencies
但 unpack
. Check the 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
阶段执行,但它们的声明顺序对于获得最终期望的结果非常重要。