使用Maven创建自包含的源代码版本

时间:2009-07-09 18:36:02

标签: java maven-2 migration release self-contained

到目前为止,我们在公司使用了Ant。每当我们想要将应用程序发送到客户端时,我们就会运行一个特殊的Ant脚本,它将所有源代码和所有jar库以及Ant本身以及一个简单的批处理文件打包在一起。

然后客户端可以将文件放在完全没有网络访问权限的计算机上(甚至不是Ant)并运行批处理文件。只要计算机具有有效的JDK,批处理脚本就会使用jar编译所有代码,并创建最终由客户端部署在应用程序服务器上的WAR / EAR。

最近我们迁移到了Maven 2.但我还没有办法做同样的事情。我已经看过Maven程序集插件,但这只是创建源代码分发或二进制代码。我们的场景实际上是一个混合,因为它包含我们的源代码,但我们使用的库的二进制jar(例如Spring,Hibernate)

因此可以使用Maven创建一个自包含的程序集/发行版/程序包,可以在一台完全没有网络访问权限的计算机上运行???这意味着所有库都应该包含在内部。

如果Maven本身也包含在内部,则额外奖励,但这不是严格的要求。最终的包应该只需一个命令即可轻松编译(系统管理员可以轻松执行)。

我正在考虑为此编写自己的Maven插件,但我怀疑有人已经遇到过这个。

5 个答案:

答案 0 :(得分:2)

在您的开发环境中,如果您在构建插件下包含以下内容

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
</plugin>

并调用mvn assembly:assembly,您将在目标文件夹中获得yourApp-version-with-dependencies.jar。这是一个自给自足的jar,使用Main-class MANIFEST.MF条目,任何人都可以双击并运行该应用程序。

答案 1 :(得分:1)

您可以尝试这种方法:

  • 使用mvn ant:ant创建ant build 来自maven项目的脚本
  • 确保ant是项目依赖项
  • 使用组件构建蚂蚁
    系统

或计划b:

  • 使用mvn ant:ant创建ant build 来自maven项目的脚本
  • 确保ant是项目依赖项
  • 编写一个“bootstrap类”来调用Ant并运行build
  • 使用appassembler构建一个 脚本化构建和安装环境

在计划b中,您将编写脚本以从打包的源jar中的某个位置设置源树,然后使用appassembler build bat或sh脚本来调用引导程序并通过ant构建。您的引导程序可以在构建之前或之后执行您需要执行的任何操作。

希望这有帮助。

答案 2 :(得分:0)

也许我为类似问题提交的答案可能会有所帮助。请参阅Can maven collect all the dependant jars for a project to help with application deployment?缺少的一个部分是如何在程序集中包含源代码。我必须想象有一些方法可以使用程序集插件来管理它。这也没有涉及在分发中包含Maven。

从Ant迁移到Maven的原因是什么?听起来你的Ant解决方案一切顺利,所以Maven在这里买到了什么?

如果只是依赖关系管理,那么techniques for leveraging Maven from Ant会为您提供两全其美的优势。

答案 3 :(得分:0)

源代码插件将为您提供一个包含probject“source:jar”源代码的jar。然后,您可以使用程序集插件将来自内部项目的源jar(使用源引用这些源jar)和来自外部项目的二进制jar组合成一个分发。

然而,至于把它变成一个可编辑的单位,我没有任何建议。你当然可以捆绑maven,但你需要创建一个包含构建项目所需的所有插件的包!我不知道有任何现有工具可以做到这一点。

答案 4 :(得分:0)

我就是这样做的...在pom的构建部分添加:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <executions>
                <execution>
                    <id>attach-sources</id>
                    <phase>verify</phase>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

然后在配置文件部分添加此位:

<profiles>
        <profile>
            <id>release</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

当我进行maven安装时,它会构建jar并检查一个源代码的jar。