如何根据谷歌java格式格式化代码

时间:2018-06-14 12:35:14

标签: java git maven intellij-idea code-formatting

当前状态:

我有一个用Java 1.8.161,Maven 3.3.9,SpringBoot 2.0.1,工具:Jenkins和GitLab构建的项目。我想用google java format作为整个团队的标准。

我的调查/解决方案:

在调查期间,我找到了solution,听起来很简单。只需使用:

更新pom文件
$V1AdjustInventoryRequest = new \SquareConne\Mode\V1AdjustInventoryRequest();

$V1AdjustInventoryRequest->setQuantityDelta((float) 10);

$V1AdjustInventoryRequest->setAdjustmentType('RECEIVE_STOCK');

$api = new \SquareConnect\Api\V1ItemsApi();

// Upsert the Inventory

apiResponse = $api->adjustInventory($location_id, $variation_id, $V1AdjustInventoryRequest);

它有效。如果我运行编译,打包,验证,安装或部署Maven生命周期,则代码将被格式化。

问题:

如何在所有团队成员的每次提交后,在他们的IDEA中没有任何额外步骤的情况下运行此操作?因为现在,我需要在每次提交之前运行Maven。但是在应用程序运行期间没有必要,所以团队可以避免它。当然这会导致git中的历史问题。

3 个答案:

答案 0 :(得分:1)

您可以让 pre-commit hook 触发格式化的文件,以便准备提交。

maven-git-code-format使用google-java-format格式化程序,并且可以在编译阶段安装客户端预提交git hook。 requires Maven 3.5.x,应予以强制。

<build>
  <plugins>
    <plugin>
      <groupId>com.cosium.code</groupId>
      <artifactId>maven-git-code-format</artifactId>
      <version>VERSION</version>
      <executions>
        <execution>
          <goals>
            <goal>install-hooks</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    <plugin>
      <artifactId>maven-enforcer-plugin</artifactId>
      <version>VERSION</version>
      <executions>
        <execution>
          <goals>
            <goal>enforce</goal>
          </goals>
          <configuration>
            <rules>
              <requireMavenVersion>
                <version>[3.5.4,)</version>
              </requireMavenVersion>
            </rules>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

在IDE中指向独立 Maven,因为 maven-git-code-format 与嵌入式Maven不能很好地配合。

mvn compile安装挂钩。对于 IDEA 就是这样。

由于 maven-git-code-format 仅格式化更改的文件(这很好),因此最好对整个项目进行一次格式化(mvn git-code-format:format-code -DglobPattern=**/*)。

Eclipse的解决方法

由于EGit中的错误有时会完全忽略Git挂钩,因此在Windows上使用 Eclipse 的开发人员的PATH中应包含Cygwin。空的cygpath.exe将起作用。以管理员身份运行“命令提示符”并执行C:\>echo "" > /"Program Files"/Git/bin/cygpath.exe(对hook is not working eclipse egit client表示敬意)。

重新启动。

关于Java导入语句排序的注意事项

在IDE中优化导入或重新格式化,或使用插件重新格式化,可能导致导入顺序发生变化。如果将旧版本的 maven-git-code-format fmt-maven-plugin 一起使用(以便稍后在CI中格式化或验证代码,例如)。

答案 1 :(得分:0)

为了在每次开发人员提交之后运行此格式化程序,您必须首先拥有一个Jenkins提交钩子,这将触发Jenkins构建。构建的其中一个阶段应执行fmt-maven-plugin(或任何其他)的check功能,以确保代码正确格式化。

添加Webhook

首先要做的是添加一个Webhook,它将在git存储库中的每次提交后触发Jenkins构建。您可以找到如何进行此操作here。有关Gitlab的特定说明,this post from medium可能会有所帮助。

执行支票

这可以通过在check上执行fmt-maven-plugin目标来完成

Maven使用<plugin-prefix>:<goal><plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>作为调用插件目标的一种方法,因此对于您的特定问题,您可以运行:

mvn fmt:check

话虽如此,您将必须添加Jenkins构建步骤,该步骤将运行上述命令。 this tutorial的第5步介绍了如何添加构建步骤。

希望这对您有所帮助:D

答案 2 :(得分:0)

我需要在每次提交之前运行Maven

您不需要运行多个Maven目标。例如,无需运行maven install进行格式化。一个简单的maven compile将形成类。