gan*_*404 7 git git-submodules git-subtree
我正在处理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更改仅在其自己的存储库中发生(https://github.com/gandra/project1.git),此更改应传播到Project2.所以没有从Project2/libs/project1-lib更新Project1换句话说:
- Project1中的提交影响Project2
- Project2中的提交不影响Project1
好吧,让我们回顾一下最重要的事实:
在我看来,构建(甚至是部分构建)并不意味着要在任何源代码管理下进行,因此我不会将 Project2 的任何路径(例如 Project2/libs/project1-lib)保留在 git 下。Maven war 插件有一个很好的功能maven-war-plugin-overlays。因此,如果 Project2 会将 Project1 视为具有 war 类型的 packaginig 的 Maven 依赖项,例如
<dependencies>
...
<dependency>
<groupId>your.group.id</groupId>
<artifactId>project1</artifactId>
<version>1.0-SNAPSHOT</version>
<type>war</type>
<scope>runtime</scope>
</dependency>
...
</dependencies>
Run Code Online (Sandbox Code Playgroud)
,您不必对 Project2/libs/project1-lib 位置进行任何处理,因为这将在打包阶段为您完成。但要做到这一点,您必须将 Project1 的战争工件安装到您的连接中。这里有几个解决方案:
解决方案1)
在 Project2 中添加新的依赖项,如下所示:
<dependency>
<groupId>your.group.id</groupId>
<artifactId>project1</artifactId>
<version>1.0-SNAPSHOT</version>
<type>war</type>
<scope>runtime</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
解决方案2)。
解释:
当您推送对 Project1 的更改时,您的 CI 将触发作业,该作业将在完成此操作后在您的 Nexus 上安装 project1-1.0-SNAPSHOT.war,将触发 Project2 的 CI 作业,并且它将包含项目 2 构建所需的一切。
注意:在这两个解决方案中,删除 Project2/libs/project1-lib 层次结构,因为它不再使用......
编辑:
对于解决方案 2),也许您应该使用grunt-maven-tasks而不是grunt-nexus-deployer,因为它有更多选项并且更合适。