我是Maven的新手,我正在开发一个对我的其他项目有一个或多个依赖项目的项目。
示例:我有3个maven项目。
MyProject和MyProjectOther彼此独立,彼此没有多大关系,但它们都依赖于MyProjectCommon。 (MyProjectOther剂量与此问题无关,只是包含它以表明MyProjectCommon用于其他项目)
在本地我可以做这个工作,我有一个工作区,我有两个包。我理解这是因为Maven将MyProjectCommon存储在本地存储库中。
两个项目(MyProject和MyProjectCommon)都有自己的GitHub存储库,我的AWS CodeBuild用于构建MyProject存储库。由于AWS CodeBuild不存在MyProjectCommon,因此失败。
MyProject pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<modelVersion>4.0.0</modelVersion>
<groupId>com.myproject</groupId>
<artifactId>myproject</artifactId>
<packaging>jar</packaging>
<version>1.0</version>
<name>myproject</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>com.myproject</groupId>
<artifactId>myproject.common</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</project>
MyProjectCommon pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<modelVersion>4.0.0</modelVersion>
<groupId>com.myproject</groupId>
<artifactId>myproject.common</artifactId>
<packaging>jar</packaging>
<version>1.0</version>
<name>myproject.common</name>
<url>http://maven.apache.org</url>
</project>
答案 0 :(得分:1)
不幸的是,在任何不了解基础构建依赖关系如何解析和/或“始终保持一致”缓存工件的CI系统上都没有简单的方法。
你在这里有几个选择。第一个选项是从库构建中发布工件。在这种情况下,您必须在CodeBuild中设置多个项目,一个用于MyProject,另一个用于MyProjectCommon。 MyProjectCommon的构建会将工件发布到S3(代码构建可以执行此操作),然后MyProject的构建可以从S3下载已发布的工件(您也可以使用maven存储库替换S3,但是您必须发布工件)。
其他更实用的选择是使用maven模块来解决此问题(maven reactor)并为MyProjectCommon和MyProject创建单个存储库。基本上,您的项目最终位于相同的存储库下,并按照各个项目的pom中指定的依赖顺序构建。这里有关于maven模块https://maven.apache.org/guides/mini/guide-multiple-modules.html
的更多文档在您拥有的示例中,您仍将保留MyProject和MyProjectCommon的pom文件,但创建另一个父Pom,将MyProject和MyProjectCommon定义为模块。然后,您可以为此存储库创建CodeBuild项目,并运行例如'mvn install',它将按依赖顺序编译MyProjectCommon和MyProject。您可以选择从CodeBuild中的构建中发布多个工件,或者为MyProject和MyProjectCommon发布带有工件的单个zip。
我希望这会有所帮助。