是否有任何类似于'dist'的maven目标?

jrh*_*ath 9 maven-2

我正在研究一个使用过的项目ant.我有一个dist基本上先做的目标,jar然后将应用程序安装到目录中.

这意味着,它会创建像目录bin/,lib/config/在安装目录,然后将相关的文件复制到这些目录中.

我的问题是双重的:

  1. 是否有任何maven目标可以做这种事情?
  2. 如果没有,我想做maven dist并实现这一目标.您如何建议我使用Maven完成此操作?
  3. 如果我不能拥有自己的"目标"(如dist),那么最好的方法是什么?

结论:我想做所有这些,但不想改变默认"目标"的行为,如编译和包等.

谢谢,jrh

PS:我正在使用maven版本 2.2.21

Sea*_*oyd 7

我不知道是什么会去config,但libbin容易.

要将所有依赖项复制到文件夹,只需执行以下操作:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>
                ${project.build.directory}/dist/lib
                </outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

要将jar输出到bin文件夹,请执行此操作(参考页面):

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <finalName>${project.artifactId}</finalName>
        <outputDirectory>${project.build.directory}/dist/bin</outputDirectory>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

啊,还有其他要求:

结论:我想做所有这些,但不想改变默认"目标"的行为,如编译和包等.

在这种情况下,我将使用配置文件打开它:

<profile>
    <id>dist</profile>
    <build>
        <plugins>
            <!-- insert stuff from above here -->
        </plugins>
    </build>
</profile>
Run Code Online (Sandbox Code Playgroud)

现在,您将mvn clean package -Pdist获取dist目录,如果不添加配置文件,则会获得默认行为.

基本上,maven的工作方式与他们在ant中的工作方式不同.没有目标,只有生命周期阶段和插件目标.

您可以执行一个生命周期阶段,这将调用绑定到所有阶段的所有Maven插件目标,到这一个(例如,如果你这样做mvn compile,以下几个阶段将被执行:validate,initialize,generate-sources,process-sources,generate-resources,process-resources,compile).但是没有(简单的)方法来定义命名的生命周期阶段dist.

或者您可以执行特定的插件目标(您实际上可以执行多个阶段和/或插件目标).例如,您可以编写自己的dist插件并使用它来调用它mvn dist:dist,但我不建议这样做,因为您使用的是现有功能,并且配置文件解决方案应该非常合适.