部署maven项目

时间:2009-07-02 00:08:14

标签: deployment maven-2

我有一个maven项目,我想用依赖项创建它的分发。我已经尝试了maven-assembly-plugin并使用依赖项构建了jar,但是将所有jar解压缩并将它们重新打包成一个大的单个jar。我喜欢的是像我的jar文件和包含所有依赖项的lib文件夹。然后当我运行它时,我可以运行“java -cp lib / * my.package.MainClass”。

与maven一起做这件事的最佳方法是什么?或推荐的部署方式?

感谢,

杰夫

2 个答案:

答案 0 :(得分:8)

我在项目中使用了Maven程序集。

首先在POM中启用插件并调用程序集配置:

        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <!--I recommend 2.1 as later versions have a  bug that may
                                Duplicate files in your archive
                            -->
                            <version>2.1</version>
            <!--Executes the packaging along with the mvn package phase
                            -->
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>attached</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <descriptors>
                    <!--Relative path to your descriptor -->
                    <descriptor>src/main/assembly/package.xml
                        </descriptor>
                </descriptors>
            </configuration>
        </plugin>

然后在您的描述符中,您可以在打包整个事物之前决定布局的方式

<assembly>
    <!-- this will create an extra resource project-1.1.1-package.zip, you can
         choose jar as well in the format-->
    <id>package</id>
    <formats>
        <format>zip</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <!-- Insert here extra files as configs or, batch files, resources, docs etc-->
    <fileSets>
        <fileSet>
            <directory>src/main/assembly/files</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>**/conf/*.*</include>
                <include>**/doc/*.*</include>
            </includes>
        </fileSet>
            <!-- I like to integrate the jre as well... simplifies my deployement -->
        <fileSet>
            <directory>target/jre</directory>
            <outputDirectory>/jre</outputDirectory> 
        </fileSet>
    </fileSets>
    <!-- This will scrub your dependencies and add them to your lib folder, I excluded
         Test stuff as it is not needed, could have declared the resource as a test
         only phase as well would not have had to exclude it here
    -->
    <dependencySets>
        <dependencySet>
            <outputDirectory>lib</outputDirectory>          
            <excludes>
                <exclude>junit:junit</exclude>
            </excludes>
        </dependencySet>
    </dependencySets>
</assembly>

这将创建一个zip文件,其中包含您在输出目录配置中指定的布局,将整个内容打包为zip文件(您可以选择zip,jar,war ...)并将其部署在我的存储库中其余部分。

我跳过点点滴滴使其变得更简单但是我的包扩展到包括批处理文件,dll,配置,doc和JRE所以所需的一切都在同一个zip ...所有需要运行的东西是提取和点击start.bat!

我也可以将它放入使用METADATA正确格式化的jar中,只需双击jar本身即可启动它,我不需要或没有时间玩这个选项,但你也可以尝试一下。 / p>

请注意程序集插件2.1以上的版本,如果你的指令使它能够在不同的位置找到相同的文件,它将创建重复的条目,这将给你一个lib文件夹,其中相同的jar重复两次。不是非常危险,因为解压缩会使它们崩溃,但仍然很烦人的解压缩问你是否要覆盖文件。此外,你不知道哪个赢了,不知道他们的内容是不同的。

Maven很棒,但我发现让它工作有时令人沮丧,有时很难找到和使用文档。但是,如果使用得当,它将为您节省大量时间。

祝你好运

答案 1 :(得分:1)

请参阅:

http://maven.apache.org/shared/maven-archiver/index.html

您应该能够使用maven-jar插件打包存档,指定要与类路径一起执行的主类。它可以为您的项目生成清单文件。

http://maven.apache.org/shared/maven-archiver/examples/classpath.html#Prefix