我正在处理2个项目,这些项目存储在2个git repos Project1和Project2中
Project1是一个JavaScript项目。它有自己的存储库(例如https://github.com/gandra/project1.git)
Project2是一个Java Maven项目。它有自己的存储库(例如https://github.com/gandra/project2.git)
这是我要改进的当前工作流程:
我想以某种方式避免执行步骤3(将Project1/build内容的手动副本复制到Project2/libs/project1-lib目录中)
我曾考虑过将Project1作为子树集成到Project2中,但是这种方法的问题在于,因为它会将所有Project1目录结构都放入Project2/libs/project1-lib中,而我只想获取Project1的子目录(Project1/build/*)
一些重要的注意事项:
Project1更改仅在其自己的repo(https://github.com/gandra/project1.git)中发生,并且此更改应传播到Project2。因此没有从Project2/libs/project1-lib更新Project1
换句话说:
-Project1中的提交会影响Project2
-Project2中的提交不影响Project1
最佳答案
好吧,让我们在这里回顾最重要的事实:
在我看来,build(甚至是部分buil)并不意味着要在任何源代码管理下进行,因此我不会将诸如Project2/libs/project1-lib之类的Project2的任何路径保留在git下。
Maven war插件具有此好功能maven-war-plugin-overlays。
因此,如果Project2将Project1视为具有包装类型的 war 类型的行家依赖,例如
<dependencies>
...
<dependency>
<groupId>your.group.id</groupId>
<artifactId>project1</artifactId>
<version>1.0-SNAPSHOT</version>
<type>war</type>
<scope>runtime</scope>
</dependency>
...
</dependencies>
,则无需对Project2/libs/project1-lib位置进行任何处理,因为这将在打包阶段为您提供帮助。
但是要这样做,您必须将Project1的 war 工件安装到您的联系中。
这里有几种解决方案:
解决方案1)
由于Project1现在将使用maven进行构建,因此您必须在打包阶段之前的某个阶段集成要由maven调用的Project1的先前构建工具(grunt,gulp或任何一种)。
<dependency>
<groupId>your.group.id</groupId>
<artifactId>project1</artifactId>
<version>1.0-SNAPSHOT</version>
<type>war</type>
<scope>runtime</scope>
</dependency>
解决方案2)。
使用相同的生成器将其作为 war 工件安装在您的联系上(注意:您必须在联系上安装pom.xml,以便其他项目可以引用Project1)
幸运的是,如果您将grunt用作js构建器,则可以使用此npm组件grunt-nexus-deployer来实现我在此描述的功能。
解释:
当您推送对Project1的更改时,您的CI将触发作业,该作业将在您的关系上安装project1-1.0-SNAPSHOT.war
完成此操作后,将触发Project2的CI作业,它将具有project2构建所需的一切。
笔记:
在这两种解决方案中,都删除Project2/libs/project1-lib层次结构,因为它不再使用了。
编辑:
对于解决方案2),也许您应该使用grunt-maven-tasks而不是grunt-nexus-deployer,因为它具有更多选项并且更合适。
关于git - 如何将构建输出从一个git repo集成到另一个,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29965058/