如果存在未提交的更改,Maven会阻止构建

时间:2015-03-24 07:45:14

标签: java git maven

有没有办法检查git repo中是否存在已提交的文件或未跟踪的文件并阻止maven构建?

我的意思是如果我跑

mvn install

安装失败时会发出警告,提示要提交。

我需要这个,因为我想知道提交的哈希,它对应于一些构建的 .war 文件。有时我忘记提交更改并构建 .war 文件,因此我无法完全按原样重现此构建。

3 个答案:

答案 0 :(得分:4)

通常,从不在开发人员工作站中构建版本来解决这些问题。

避免这种情况的一种方法是使用一台机器将git存储库拉入一个干净的目录,并从那里启动构建。然后你总是使用"主线构建"用于测试和部署。

Jenkins是一个自动化工具,可以驱动如上所述的干净构建。还有其他工具,但Jenkins是最受欢迎的。

了解您是否拥有所有内容的最佳方法是运行git status并阅读回复。但是,即使有这种理解,也很容易忘记将提交推送到原点,当你推送它时,也有可能合并提交。简而言之,您可能需要在您的过程中更加谨慎,而不是依靠工具来照顾您。

答案 1 :(得分:2)

可以使用git hook来完成此任务;我会使用像jenkinshudson之类的东西来完成这个,但是因为你问过使用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文件中。