到目前为止,我们在公司使用了Ant。每当我们想要将应用程序发送到客户端时,我们就会运行一个特殊的Ant脚本,它将所有源代码和所有jar库以及Ant本身以及一个简单的批处理文件打包在一起。
然后客户端可以将文件放在完全没有网络访问权限的计算机上(甚至不是Ant)并运行批处理文件。只要计算机具有有效的JDK,批处理脚本就会使用jar编译所有代码,并创建最终由客户端部署在应用程序服务器上的WAR / EAR。
最近我们迁移到了Maven 2.但我还没有办法做同样的事情。我已经看过Maven程序集插件,但这只是创建源代码分发或二进制代码。我们的场景实际上是一个混合,因为它包含我们的源代码,但我们使用的库的二进制jar(例如Spring,Hibernate)
因此可以使用Maven创建一个自包含的程序集/发行版/程序包,可以在一台完全没有网络访问权限的计算机上运行???这意味着所有库都应该包含在内部。
如果Maven本身也包含在内部,则额外奖励,但这不是严格的要求。最终的包应该只需一个命令即可轻松编译(系统管理员可以轻松执行)。
我正在考虑为此编写自己的Maven插件,但我怀疑有人已经遇到过这个。
答案 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)
您可以尝试这种方法:
或计划b:
在计划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。