Maven-assembly:如何为每次执行打包 imported/used 依赖项
Maven-assembly: how package only imported/used dependencies for each execution
我有一个 Maven 项目,我需要将不同的 Java 程序打包为 jar,每个程序都有自己的依赖项。
为实现这一点,我目前使用 maven-assembly-plugin 进行不同的执行,一个用于我需要打包的每个 java 程序(例如 Program1.java、Program2.java、Program3.java):
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>assembly1</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<archive>
<manifest>
<mainClass>my.package1.Program1</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>Program1</finalName>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</execution>
<execution>
<id>assembly2</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<archive>
<manifest>
<mainClass>my.package2.Program2</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>Program2</finalName>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</execution>
<execution>
<id>assembly3</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<archive>
<manifest>
<mainClass>my.package3.Program3</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>Program3</finalName>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</execution>
</executions>
</plugin>
其中每一个 类(程序 1、程序 2、程序 3)都需要不同的库作为依赖项,因此我希望在输出中获得 3 个不同大小的 jar,但我得到了 3 个相同大小的文件( Program1.jar、Program2.jar、Program3.jar)。
就好像Maven把所有定义在tag dependencies里面的依赖都打包了,不管用不用。
如何告诉 maven 打包,对于 assembly-plugin 中的每次执行,只有指定 Class 有效导入和使用的依赖项?
程序集插件的默认行为是包含当前 Maven 模块的所有依赖项。您可以通过显式 excluding 不需要的依赖项来更改它。
但是,如果您有三个不同的程序,甚至没有相同的依赖项,最好将您的项目拆分为三个不同的(子)模块,也许有一个共同的父 pom。可以找到更多详细信息 here。拆分项目后,每个子模块可以 运行 自己的程序集插件,只打包为每个子模块声明的依赖项。
如果您决定拆分您的项目,您可以在依赖插件的帮助下清理每个 sub-module 所需的依赖项,目标 dependency:analyze.
我有一个 Maven 项目,我需要将不同的 Java 程序打包为 jar,每个程序都有自己的依赖项。 为实现这一点,我目前使用 maven-assembly-plugin 进行不同的执行,一个用于我需要打包的每个 java 程序(例如 Program1.java、Program2.java、Program3.java):
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>assembly1</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<archive>
<manifest>
<mainClass>my.package1.Program1</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>Program1</finalName>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</execution>
<execution>
<id>assembly2</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<archive>
<manifest>
<mainClass>my.package2.Program2</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>Program2</finalName>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</execution>
<execution>
<id>assembly3</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<archive>
<manifest>
<mainClass>my.package3.Program3</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>Program3</finalName>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</execution>
</executions>
</plugin>
其中每一个 类(程序 1、程序 2、程序 3)都需要不同的库作为依赖项,因此我希望在输出中获得 3 个不同大小的 jar,但我得到了 3 个相同大小的文件( Program1.jar、Program2.jar、Program3.jar)。 就好像Maven把所有定义在tag dependencies里面的依赖都打包了,不管用不用。
如何告诉 maven 打包,对于 assembly-plugin 中的每次执行,只有指定 Class 有效导入和使用的依赖项?
程序集插件的默认行为是包含当前 Maven 模块的所有依赖项。您可以通过显式 excluding 不需要的依赖项来更改它。
但是,如果您有三个不同的程序,甚至没有相同的依赖项,最好将您的项目拆分为三个不同的(子)模块,也许有一个共同的父 pom。可以找到更多详细信息 here。拆分项目后,每个子模块可以 运行 自己的程序集插件,只打包为每个子模块声明的依赖项。
如果您决定拆分您的项目,您可以在依赖插件的帮助下清理每个 sub-module 所需的依赖项,目标 dependency:analyze.