代码之家  ›  专栏  ›  技术社区  ›  kazanaki

用Maven创建一个独立的源代码发布

  •  5
  • kazanaki  · 技术社区  · 15 年前

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

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

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

    那么,有没有可能用maven创建一个独立的程序集/发布/包,可以在一台完全没有网络访问的计算机上运行?你说什么?这意味着所有的库都应该包含在里面。

    如果Maven本身也包含在里面,那么额外的奖金,但这不是一个严格的要求。最后一个包应该只需一个命令就可以轻松编译(对于系统管理员来说很容易执行)。

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

    5 回复  |  直到 15 年前
        1
  •  1
  •   sal    15 年前

    您可以尝试以下方法:

    • 使用mvn-ant:ant创建Ant构建 Maven项目的脚本
    • 确保Ant是项目依赖项
    • 使用程序集生成Ant
      系统

    或计划B:

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

    在计划B中,您将编写脚本来从打包的源jar中建立源代码树,然后使用Appassembler build bat或sh脚本调用引导程序并通过Ant进行构建。在构建之前或之后,引导程序可以做任何需要做的事情。

    希望这有帮助。

        2
  •  2
  •   Ran    15 年前

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

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

    并调用mvn assembly:assembly,您将在目标文件夹中获得rapp-version-with-dependencies.jar。这是一个自给自足的JAR,通过主类manifest.mf条目,任何人都可以双击并运行应用程序。

        3
  •  0
  •   Community Neeleshkumar S    7 年前

    也许我为一个类似的问题提交的答案可以提供一些帮助。见 Can maven collect all the dependant jars for a project to help with application deployment? 缺少的一部分是如何在程序集中包含源代码。我不得不想象有某种方法可以用程序集插件来管理它。这也不能解决maven在分布中的包含问题。

    从蚂蚁迁移到马文的原因是什么?听起来你对蚂蚁的解决方案都做得很好,那么Maven在这里买你什么呢?

    如果只是依赖关系管理,那么 techniques for leveraging Maven from Ant 这会让你两全其美。

        4
  •  0
  •   james    15 年前

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

    但是,对于将其转换为可编译单元,我没有任何建议。当然可以捆绑Maven,但是您需要创建一个包含构建项目所需的所有插件的捆绑包!我不知道有什么现有的工具可以做到这一点。

        5
  •  0
  •   mransley    15 年前

    我就是这样做的…在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部分添加此位:

    <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。