我有一个项目 maven
依赖项,我想指示 maven
将一些依赖项复制到 libraries
目录并将其他目录直接合并到输出 JAR
中.
到目前为止我使用了maven-dependency-plugin
将所有依赖项复制到 libraries
目录:
<properties>
<libraries.directory>libraries</libraries.directory>
</properties>
<!-- ... -->
<!-- Copy JAR libraries to target folder -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/${libraries.directory}</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
这有效。但是,现在我想排除特定的 groupdId
并将该依赖项合并到输出 JAR
中如 this 中所述回答。
我可以成功排除 groupId
与 excludeGroupIds
但添加第二个 execution
带有 includeGroupIds
的 block 标记导致依赖项被复制到 target/dependency
子目录这不是我想要的。
我还使用 maven-jar-plugin
建立我的JAR
并引用 libraries
classpath
上的目录:
<!-- Generate Target JAR -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
!-- Drop the META-INF/maven folder -->
<addMavenDescriptor>false</addMavenDescriptor>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>${libraries.directory}</classpathPrefix>
<mainClass>ApplicationClient</mainClass>
</manifest>
<manifestEntries>
<Built-By>Me</Built-By>
</manifestEntries>
</archive>
</configuration>
</plugin>
也许依赖项包含在 JAR
中必须为 maven-jar-plugin
配置相反,如何才能做到这一点?
最佳答案
我通过使用maven-dependency-plugin
解决了这个问题...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/${libraries.directory}</outputDirectory>
<!-- Excluded in the libraries directory -->
<excludeGroupIds>com.mycompany, com.mysecondcompany</excludeGroupIds>
</configuration>
</execution>
</executions>
</plugin>
和maven-shade-plugin
:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<artifactSet>
<!-- Included in the fat JAR -->
<includes>
<include>com.mycompany:*:jar:</include>
<include>com.mysecondcompany:*:jar:</include>
</includes>
</artifactSet>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
为了清晰起见,删除了不相关的标签。
关于java - Maven:将一些依赖项复制到库目录中,并将其他依赖项合并到输出 JAR 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62120300/