具有依赖项的Maven程序集插件jar - 插件未运行

时间:2017-05-03 18:48:01

标签: java maven jar

我有一个Maven项目(父项目的子模块),我需要创建一个“带有依赖项的jar”。我将maven-assembly-plugin添加到pom.xml中,但它没有创建工件。我已经慢慢剥离了pom.xml中的所有其他东西,直到剩下的都是依赖项和这个插件,它仍然不会创建一个带有依赖项的jar。观看mvn clean package的输出,它会运行cleancompilejar但从不运行assembly插件。我不知道为什么。这是pom.xml,有人能发现问题吗?

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>project</groupId>
    <artifactId>project-name</artifactId>
    <version>1.0</version>
    <name>project-name</name>

    <properties>
        <build.time>${maven.build.timestamp}</build.time>
        <spring.framework.version>4.3.1.RELEASE</spring.framework.version>
        <spring.security.version>4.1.1.RELEASE</spring.security.version>
        <spring.webflow.version>2.4.2.RELEASE</spring.webflow.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <build>
        <sourceDirectory>${project.basedir}/src/java</sourceDirectory>
        <resources>
            <resource>
                <directory>${project.basedir}/src/resources</directory>
            </resource>
        </resources>
        <outputDirectory>${project.basedir}/target/classes</outputDirectory>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>

        </plugins>
    </build>

    <dependencies>
        [snip]
    </dependencies>
</project>

1 个答案:

答案 0 :(得分:1)

Maven reference

  

从程序集中组装应用程序包或分发   描述。此目标适用于绑定到生命周期   或直接从命令行调用(提供所有必需的文件   在构建开始之前可用,或者由另一个目标生成   在命令行之前在此指定之前指定。)

asssembly:single目标可以通过两种方式使用:

  • 将其绑定到生命周期

  • 或直接从命令行调用

你没有其中任何一个。

例如,您可以将插件执行绑定到package阶段:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.0.0</version>
    <configuration>
        <phase>package</phase> <!-- bind to the packaging phase -->
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
</plugin>

现在mvn packagemvn install命令将创建具有依赖关系的jar。

您还可以保留实际的插件配置并运行mvn assembly:single命令。

第二种方法允许根据需要创建具有依赖性的jar,而不是每次构建 如果jar创建是一个不需要在每次构建时执行的长任务,那么这可能是合乎需要的。