我正在设置一个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安装到本地仓库时,它们不会被编译到类路径期望的地方。
我想如果我可以通过上面的脚本来提取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>
答案 0 :(得分:0)
如果我错了,请纠正我 - 您想将源代码转换为已编译的JAR,并为其依赖项设置适当的类路径?这不是dependency:get
的全部内容。您应该查看Maven JAR plugin和/或Maven AppAssembler插件。