如何将jar放在与Maven Assembly Plugin相同的文件夹中

时间:2015-11-20 23:32:38

标签: java maven maven-assembly-plugin

我有一个带有n ***(多个)模块项目的多模块Apache Maven 3.3.3项目:

/mvnModular
           /modules
           /modules /mainApp    /pom.xml
           /modules /module1    /pom.xml
           /modules /module2    /pom.xml
           /modules /moduleChat /pom.xml
           /modules /moduleBlog /pom.xml

...

模块只有一个文件pom.xml:

<groupId>mainmod.modules</groupId>
<artifactId>modules</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>

<modules>
  <module>..\mainApp\pom.xml</module>
  <module>..\module1\pom.xml</module>
  <module>..\module2\pom.xml</module>
  <module>..\moduleChat\pom.xml</module>
  <module>..\moduleBlog\pom.xml</module>
</modules>

...

如何将各个模块项目中的所有.jar文件添加到项目根文件夹mvnModular中名为lib的文件夹中?

这就是我最后想要的:

/mvnModular
    mainApp.jar
                /lib
                /lib    /module1.jar
                /lib    /module2.jar
                /lib    /moduleChat.jar
                /lib    /moduleBlog.jar

.....

各个模块都有一个 pom.xml 文件,如下所示:

<parent>
  <groupId>mainmod.modules</groupId>
  <artifactId>modules</artifactId>
  <version>1.0-SNAPSHOT</version>
  <relativePath>../modules/pom.xml</relativePath>
</parent>

<groupId>mainmod.modules.module2</groupId>
<artifactId>module2</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

<name>module1</name>

更新

我们的想法是以一种方式编写应用程序,用户将在根mvnModular文件夹中下载包含mainApp.jar的项目mainApp,这是主要项目。然后可以通过将模块添加到mvnModular根目录中名为packages的文件夹来扩展应用程序(mainApp.jar)。

1 个答案:

答案 0 :(得分:1)

您可以使用 maven-antrun-plugin 。这必须添加到每个模块中。

检查下面的示例。

父POM

<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>TestMavenModules</groupId>
    <artifactId>TestMavenModules</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modules>
        <module>Module1</module>
        <module>Module2</module>
    </modules>

</project>

Module1 POM

<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>
    <parent>
        <groupId>TestMavenModules</groupId>
        <artifactId>TestMavenModules</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>Module</artifactId>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.7</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <configuration>
                            <target>
                                <copy
                                    file="${project.build.directory}/${project.artifactId}-${project.version}.jar"
                                    todir="../PackagedJars" />
                            </target>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Module2 POM

<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>
    <parent>
        <groupId>TestMavenModules</groupId>
        <artifactId>TestMavenModules</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>Module2</artifactId>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.7</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <configuration>
                            <target>
                                <copy
                                    file="${project.build.directory}/${project.artifactId}-${project.version}.jar"
                                    todir="../PackagedJars" />
                            </target>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

最后,您将在根目录中的PackagedJars目录中拥有jar。

/PackagedJars
----/Module1-0.0.1-SNAPSHOT.jar
----/Module2-0.0.1-SNAPSHOT.jar