java - 从 repo 构建可部署的 maven 代码的常规工作流程

标签 java maven deployment build

我正在建立一个 Maven 存储库,目的是使我的大部分构建和部署过程自动化。我目前的工作流程从启动服务器开始,执行 git clone,然后运行一堆 mvn install 命令来完成顶级应用程序。

据我了解,Maven 不是用于部署应用程序的工具,目前我认为不需要持续集成或持续部署服务器或正式流程。

但是,到目前为止,我还没有找到一种规范的方法来将完整的、可运行的程序与 Maven 组合在一起。

这个脚本甚至可以获取顶级 jar 并将其安装到本地 maven 存储库中:

mvn -DgroupId=me.company -DartifactId=Top-Level-Application -Dversion=1.0-SNAPSHOT   -DrepoUrl='http://theserver:8081/nexus/' dependency:get

如果我手动安装所有东西,这个应用程序会在 lib/ 目录中找到它所有的依赖 jar,就像 Maven 应该做的那样。然而,这个拉取的 jar 是不可部署的——虽然依赖的 jar 安装到本地 repo,但它们没有在类路径期望的地方编译。

我想如果我可以操纵上面的脚本来拉取 pom.xml 而不仅仅是 jar 并在其上运行 mvn install ,一切都会顺利进行(尽管奇怪的是,这似乎是在重复构建过程的最后一步)。另一种选择是应用程序将所有依赖的 jar 汇总到一个巨大的 jar 中,并且没有外部依赖。

哪些(或其他)选项是完成 Maven 构建过程的正确方法?

这是我们的顶级 pom,缩小到我认为相关的范围:

<project>
<modelVersion>4.0.0</modelVersion>
<groupId>me.company</groupId>
<artifactId>Top-Level-Application</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>Top Level Application</name>
<url>http://company.me</url>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<distributionManagement>
    <repository>
        <id>releases</id>
        <url>http://host:8081/nexus/content/repositories/releases</url>
    </repository>
    <snapshotRepository>
        <id>snapshots</id>
        <name>Internal Snapshots</name>
        <url>http://host:8081/nexus/content/repositories/snapshots</url>
    </snapshotRepository>
</distributionManagement>

<build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.5.1</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>me.company.application.MainClass</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.4</version>
            <executions>
                <execution>
                    <id>copy</id>
                    <phase>compile</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>
                            ${project.build.directory}/lib
                        </outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
<dependencies>
    <dependency>
        <groupId>me.company</groupId>
        <artifactId>First-Library</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <!-- more in-house libraries -->
    <!-- third party libraries - Apache Commons, javamail, etc. -->
</dependencies>
</project>

最佳答案

如果我错了,请纠正我——您想将您的源代码转换为编译后的 JAR,并为其依赖项适当设置类路径?这根本不是dependency:get 的目的。你应该看看 Maven JAR plugin和/或 Maven AppAssembler插件。

关于java - 从 repo 构建可部署的 maven 代码的常规工作流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13850138/

相关文章:

java - 无法使用 NetBeans 在 Maven 项目中为 @author 值生成 JavaDoc

maven - POM 错误 : Failure to find org. springframework.boot

deployment - 如何在表格模型部署期间传递数据源的凭据?

c++ - 用户是否需要满足任何先决条件才能运行 C++17 软件?

java - 无法导入具有某些属性的 ldif 文件

java - Java Web项目仅在Eclipse中运行

java - 为什么以及如何避免 Maven 在 mvn 包上的 jsp 中替换 ${id}

ruby-on-rails - 使用 Ruby on Rails 和 Capistrano 部署跟踪

java - .p2 文件夹的恢复。 Eclipse 没有启动

java - 管理多帧应用程序