从Maven项目生成分发

时间:2011-09-23 08:04:57

标签: java maven distribution

我想用Maven构建一个应用程序分发。我的项目中有一个包含主要源代码的模块。我决定从这个模块构建应用程序分发。我告诉模块的POM中的maven将所有配置文件和从属库复制到target/目录。我的问题是,Maven将所有与构建相关的临时目录(例如。classesgenerated-sourcesmaven-archiver)保留在目标目录中。我不想至少在install阶段自动删除这些内容。我怎么能做到这一点?如果我将maven-clean-plugin放到构建的末尾,看起来Maven总是会删除整个target目录,无论我试图排除文件我想要保留的内容。

2 个答案:

答案 0 :(得分:2)

在你的pom中尝试这个

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2-beta-4</version>
    <executions>
        <execution>
            <id>user_distribution</id>
            <phase>package</phase>
            <goals>
                <goal>attached</goal>
            </goals>
            <configuration>
                <descriptors>
                    <descriptor>src/main/assembly/dist.xml</descriptor>
                </descriptors>
            </configuration>
        </execution>
    </executions>
</plugin>

这是xml

<?xml version="1.0" encoding="UTF-8"?>
<assembly xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/xsd/assembly-1.1.1.xsd">

    <id>dist</id>
    <formats>
        <format>zip</format>
    </formats>
    <files>
        <file>
            <source>target/${pom.artifactId}-${pom.version}.jar</source>
            <outputDirectory>lib/</outputDirectory>
        </file>
    </files>
    <fileSets>
        <fileSet>
            <directory>directory to be included</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>file name to be included</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>another directory to be included</directory>
            <outputDirectory>/</outputDirectory>
        </fileSet>
    </fileSets>
</assembly>

答案 1 :(得分:0)

  

我在模块的POM中告诉maven复制所有配置   文件和从属库到目标/目录

你好吗?

基于这个问题,您似乎不必担心有选择地删除目标文件夹的内容(可以通过自定义maven clean plugin完成),而是使用maven assembly plugin创建分发(如指出的那样)出自@Scorpion)。

后者允许您将所有项目工件(包括依赖项)捆绑为zip或其他格式,然后开发人员可以轻松使用。您可能希望通过使用单独的profile将其与常规构建分离,以便仅根据需要构建分发。