Java Maven assembly:包如何仅为每次执行导入/使用依赖项
我有一个Maven项目,需要将不同的Java程序打包为JAR,每个JAR都有自己的依赖项。 为了实现这一点,我目前正在使用不同的执行,我需要打包的每个java程序(例如Program1.java、Program2.java、Program3.java)都有一个执行:Java Maven assembly:包如何仅为每次执行导入/使用依赖项,java,maven,dependencies,package,maven-assembly-plugin,Java,Maven,Dependencies,Package,Maven Assembly Plugin,我有一个Maven项目,需要将不同的Java程序打包为JAR,每个JAR都有自己的依赖项。 为了实现这一点,我目前正在使用不同的执行,我需要打包的每个java程序(例如Program1.java、Program2.java、Program3.java)都有一个执行: maven汇编插件 大会1 包裹 单一的 my.package1.Program1 带有依赖项的jar 方案1 假的 大会2 包裹 单一的 my.package2.Program2 带有依赖项的jar 方案2 假的 大会3 包裹
maven汇编插件
大会1
包裹
单一的
my.package1.Program1
带有依赖项的jar
方案1
假的
大会2
包裹
单一的
my.package2.Program2
带有依赖项的jar
方案2
假的
大会3
包裹
单一的
my.package3.Program3
带有依赖项的jar
方案3
假的
这些类中的每一个(Program1、Program2、Program3)都需要不同的库作为依赖项,因此我希望在输出中得到3个大小不同的jar,但我得到了3个大小相同的文件(Program1.jar、Program2.jar、Program3.jar)。
就像Maven正在打包标记依赖项中定义的所有依赖项,不管它们是否被使用
我如何告诉maven,对于程序集插件内的每次执行,仅打包指定类有效导入和使用的依赖项?程序集插件的默认行为是包含当前maven模块的所有依赖项。您可以通过解释不需要的依赖项来改变这一点 但是,如果您有三个不同的程序,它们甚至没有相同的依赖项,那么最好将您的项目分成三个不同的(子)模块,可能有一个共同的父pom。可以找到更多细节。拆分项目后,每个子模块都可以运行自己的程序集插件,该插件只打包为每个子模块声明的依赖项
如果您决定拆分项目,您可以借助依赖插件goal清理每个子模块所需的依赖项。谢谢,我正在这么做,这似乎是唯一可行的解决方案。我不知道依赖:分析插件,谢谢!
<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>