Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven assembly:包如何仅为每次执行导入/使用依赖项_Java_Maven_Dependencies_Package_Maven Assembly Plugin - Fatal编程技术网

Java Maven assembly:包如何仅为每次执行导入/使用依赖项

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项目,需要将不同的Java程序打包为JAR,每个JAR都有自己的依赖项。 为了实现这一点,我目前正在使用不同的执行,我需要打包的每个java程序(例如Program1.java、Program2.java、Program3.java)都有一个执行:


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>