java - Maven:将一些依赖项复制到库目录中,并将其他依赖项合并到输出 JAR 中

标签 java maven

我有一个项目 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 中所述回答。

我可以成功排除 groupIdexcludeGroupIds但添加第二个 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/

相关文章:

java - 在 JSP 中添加自定义标签库时出现 NullPointerException

java - 将带有证书和 key 的 NodeJS 请求转换为 Java

java - Flink Quickstart 中 Eclipse IDE 中缺少依赖项

maven - 带有依赖项的pom.xml中的错误(缺少 Artifact ……)

java - 如何将文件夹添加到由 maven cargo 插件启动的 Tomcat 容器的类路径

java - 如何删除重复项?

java - Apache Hadoop 2.6 Java堆空间错误

java - 错误将此数据转换为日期 ("HH:mm a")、("dd MM")和 ("yyyy")。如何将其划分为 :D 部分

java - 解决子 pom 的 Maven 依赖关系

java - 在 Netbeans 中添加来自 Maven 库的源代码