有没有办法检查git repo中是否存在已提交的文件或未跟踪的文件并阻止maven构建?
我的意思是如果我跑
mvn install
安装失败时会发出警告,提示要提交。
我需要这个,因为我想知道提交的哈希,它对应于一些构建的 .war 文件。有时我忘记提交更改并构建 .war 文件,因此我无法完全按原样重现此构建。
答案 0 :(得分:4)
通常,从不在开发人员工作站中构建版本来解决这些问题。
避免这种情况的一种方法是使用一台机器将git存储库拉入一个干净的目录,并从那里启动构建。然后你总是使用"主线构建"用于测试和部署。
Jenkins是一个自动化工具,可以驱动如上所述的干净构建。还有其他工具,但Jenkins是最受欢迎的。
了解您是否拥有所有内容的最佳方法是运行git status
并阅读回复。但是,即使有这种理解,也很容易忘记将提交推送到原点,当你推送它时,也有可能合并提交。简而言之,您可能需要在您的过程中更加谨慎,而不是依靠工具来照顾您。
答案 1 :(得分:2)
可以使用git hook来完成此任务;我会使用像jenkins或hudson之类的东西来完成这个,但是因为你问过使用git,钩子看起来应该是这样的:
# pre-commit
git diff || true
将其标记为可执行文件,您应该是金色的。
答案 2 :(得分:0)
对于修改后的(但不是未跟踪的)文件,Maven SCM插件可以为您提供帮助,特别是scm:check-local-modification
将此添加到插件部分:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-scm-plugin</artifactId>
<version>1.11.2</version>
<executions>
<execution>
<goals>
<goal>check-local-modification</goal>
</goals>
<phase>compile</phase>
</execution>
</executions>
</plugin>
仔细选择阶段,以定义在进行本地修改时希望停止构建的位置。上面的示例将阻止任何编译。如果希望能够编译修改后的代码,请考虑将阶段设置为package
。这样,您将能够对修改后的代码进行编译和单元测试,而无需将其打包到jar文件中。