Multi Project Maven和AWS CodeBuild

时间:2017-04-12 18:22:01

标签: maven amazon-web-services aws-codebuild

我是Maven的新手,我正在开发一个对我的其他项目有一个或多个依赖项目的项目。

示例:我有3个maven项目。

  • MyProject
  • MyProjectOther
  • MyProjectCommon

MyProject和MyProjectOther彼此独立,彼此没有多大关系,但它们都依赖于MyProjectCommon。 (MyProjectOther剂量与此问题无关,只是包含它以表明MyProjectCommon用于其他项目)

在本地我可以做这个工作,我有一个工作区,我有两个包。我理解这是因为Maven将MyProjectCommon存储在本地存储库中。

两个项目(MyProject和MyProjectCommon)都有自己的GitHub存储库,我的AWS CodeBuild用于构建MyProject存储库。由于AWS CodeBuild不存在MyProjectCommon,因此失败。

  • 如何让这个版本与AWS CodeBuild一起使用,让CodeBuild在构建MyProject之前下载并构建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>

1 个答案:

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

我希望这会有所帮助。