当前状态:
我有一个用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中的历史问题。
答案 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=**/*
)。
由于EGit中的错误有时会完全忽略Git挂钩,因此在Windows上使用 Eclipse 的开发人员的PATH中应包含Cygwin。空的cygpath.exe
将起作用。以管理员身份运行“命令提示符”并执行C:\>echo "" > /"Program Files"/Git/bin/cygpath.exe
(对hook is not working eclipse egit client表示敬意)。
重新启动。
在IDE中优化导入或重新格式化,或使用插件重新格式化,可能导致导入顺序发生变化。如果将旧版本的 maven-git-code-format 与 fmt-maven-plugin 一起使用(以便稍后在CI中格式化或验证代码,例如)。
答案 1 :(得分:0)
为了在每次开发人员提交之后运行此格式化程序,您必须首先拥有一个Jenkins提交钩子,这将触发Jenkins构建。构建的其中一个阶段应执行fmt-maven-plugin(或任何其他)的check
功能,以确保代码正确格式化。
首先要做的是添加一个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
将形成类。