构建阶段的Maven复制

时间:2012-05-04 19:24:07

标签: java eclipse maven

我的情况是:

  • 我有一个扫描libs目录的项目。
  • 这个项目不依赖于其他项目(jar),但是这会将它们从目录动态加载到他的类加载器(是一种插件架构)。
  • 这两个项目都在一个pom项目下

poms的例子:

<groupId>mygroup</groupId>
<artifactId>myparent</artifactId>
<packaging>pom</packaging>
<version>1.0</version>
...

“插件”

<parent>
    <artifactId>myparent</artifactId>
    <groupId>mygroup</groupId>
    <version>1.0</version>
</parent>

<groupId>mygroup</groupId>
<artifactId>myplugin</artifactId>
<packaging>jar</packaging>
<version>1.0</version>
...

“装载程序”

<parent>
    <artifactId>myparent</artifactId>
    <groupId>mygroup</groupId>
    <version>1.0</version>
</parent>

<groupId>mygroup</groupId>
<artifactId>myloader</artifactId>
<packaging>war</packaging>
<version>1.0</version>
...

现在,我需要生成jar “plugin”并在构建时将其复制到项目“loader”中的已定义目录。

这必须在eclipse本地工作,并在jenkins中自动构建。

有人知道我该怎么做吗?

2 个答案:

答案 0 :(得分:2)

基本上它分四步解决:

  1. 我在“插件”项目中配置插件“maven-assembly-plugin”,将jar复制到项目“loader”中的相对路径中。
  2. 在此配置中,我在 jar-with-dependencies 中指定属性“descriptorRef”,这有助于我将必要的库打包到jar中
  3. 我在“插件”项目中配置插件“maven-copy-plugin”,以在项目“loader”中的相同相对路径中复制属性
  4. 我的“插件”项目中的pom.xml保持这样:

    <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <outputDirectory>${my.output.directory}</outputDirectory>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>     
                </configuration>
            </plugin>
            <plugin>
                <groupId>com.goldin.plugins</groupId>
                <artifactId>maven-copy-plugin</artifactId>
                <version>0.2.3.6</version>
                <executions>
                    <execution>
                        <id>create-archive</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
                            <resources>
                                <!-- Copy config properties -->
                                <resource>
                                    <targetPath>${my.output.directory}</targetPath>
                                    <directory>${project.basedir}/conf</directory>
                                    <includes>
                                        <include>*.properties</include>
                                    </includes>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    

    另一方面,我将项目设置为使用目录 $ {my.output.directory}

    中的插件
    1. 要在eclipse中自动构建,我为项目创建了一种新类型的程序构建器。此构建器运行命令“mvn assembly:assembly”。
    2. 第1步

      enter image description here

      第2步

      enter image description here

      步骤3:在“构建选项”选项卡中,您可以配置此执行的详细信息。

      对于jenkins,我创建了一个虚拟插件,仅用于测试。

答案 1 :(得分:0)

为插件运行maven install,将生成的jar放入本地maven仓库。然后在依赖项部分中指定插件作为依赖项。在这种情况下,即使这些项目是兄弟姐妹,它们也只是兄弟姐妹,因为父母在父母中运行mvn目标时指定构建顺序。如果您打算在那里使用它们,它们的实际构建工件必须包含在兄弟姐妹中。