5

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

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

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

那么是否可以使用 Maven 创建一个可以在完全没有网络访问权限的计算机上运行的自包含程序集/发布/包?这意味着所有的库都应该包含在里面。

如果 Maven 本身也包含在其中,则会有额外的好处,但这不是一个严格的要求。最终的包应该可以通过一个命令轻松编译(系统管理员很容易执行)。

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

4

5 回答 5

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 条目,任何人都可以双击并运行该应用程序。

于 2009-07-14T06:12:45.253 回答
1

您可以尝试这种方法:

  • 使用 mvn ant:ant 从 maven 项目创建 ant 构建脚本
  • 确保 ant 是项目依赖项
  • 使用程序集构建蚂蚁
    系统

或计划 b:

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

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

希望这可以帮助。

于 2009-07-10T15:44:51.483 回答
0

也许我为类似问题提交的答案可能会有所帮助。请参阅maven 可以收集项目的所有依赖 jar 以帮助进行应用程序部署吗?缺少的一件是如何在程序集中包含源代码。我不得不想象有一些方法可以使用程序集插件来管理它。这也没有解决在发行版中包含 Maven 的问题。

从 Ant 迁移到 Maven 的原因是什么?听起来您使用 Ant 解决方案一切顺利,那么 Maven 在这里为您买了什么?

如果只是依赖管理,那么有一些利用 Ant 的 Maven 的技术可以让您两全其美。

于 2009-07-09T19:35:07.417 回答
0

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

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

于 2009-07-09T20:31:15.917 回答
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。

于 2009-07-13T13:36:13.040 回答