java - 构建阶段的 Maven 复制

标签 java eclipse maven

我的情况是:

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

pom 示例:

家长:

<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 中自动构建。

有人知道我该怎么做吗?

最佳答案

基本上分四步解决:

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

我的“插件”项目中的 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}

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

    enter image description here

    第 2 步:

    enter image description here

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

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

    关于java - 构建阶段的 Maven 复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10454935/

    相关文章:

    java - 无法打开可执行 jar 文件

    java - java中的月初和月末时间戳

    Eclipse web.xml 编辑器

    java - 更改 Java Soap 服务结果元素名称

    java - Apache Felix OSGi 错误 : missing requirement osgi. 扩展程序

    android - 使用 maven 构建 apk 中的 ClassNotFoundException

    java - 用于 java 或 android 的 ePub 库

    java - Apache Sling 循环重复

    java - 如何删除 JBoss 工具项目属性中的 JPA 连接?

    spring - Maven 不会使用 1.7 JDK 编译 Java 7