我正在IJ的Java代码库上工作,目前正在使用Maven构建。我想用某种形式的合同补充一些代码,这些合同将在Maven构建中被选中。到目前为止,我在寻找现成的这种功能方面没有成功:
注意:我只关心编译时可检查合同。我有JUnit在运行时抛出一些东西。
与强制合同:
我已添加此部分来回答评论,询问我希望执行哪种合同。理想情况下,我喜欢最强大的解决方案,条件是该解决方案完成。当我在这里说完,我的意思是合同语言和合同检查器,以便在编译时由检查员检查语言中的每个语句是好还是坏。我知道这可能是一个很大的问题,但即使是最简单的合同,我也会感到高兴,例如: those offered by Jetbrains
有关具体示例,请考虑以下函数:
public static Long safeToLong(String value) {
if (value == null) {
return null;
}
try {
return Long.parseLong(value);
} catch (NumberFormatException e) {
return null;
}
}
这成功通过了Jetbrains合同:
@Contract("null -> null")
这个人为的合同失败了:
@Contract("null -> !null")
但是由于上述人为的,糟糕的合同,Maven构建仍然可以正常运行。构建不会检测到检查结果 - 这些只能在IJ内部看到。我希望能够挂钩构建并在违反任何合同时失败。
答案 0 :(得分:1)
这是一个解决方案,适用于IntelliJ Contracts。有点混乱,但是可以用:
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<version>1.6.1</version>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>execute</goal>
</goals>
</execution>
</executions>
<configuration>
<properties>
</properties>
<scripts>
<script>file:///${project.basedir}/idea-cli-inspector/ideainspectMvn.groovy</script>
</scripts>
</configuration>
<dependencies>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<!-- any version of Groovy \>= 1.5.0 should work here -->
<version>2.5.0</version>
<type>pom</type>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
</plugin>
如果在运行检查时得到this EXCEPTION_ACCESS_VIOLATION bug,则可以通过在安装IJ的文件bin \ idea64.exe.vmoptions的末尾添加-Dswing.noxp = true来解决此问题。修复程序记录在此IJ crash thread的末尾。
要将其添加到您的Gradle构建中,比在Maven中更简单。只需将此任务添加到您的build.gradle文件中即可:
task inspect(type:Exec) {
workingDir '/idea-cli-inspector'
//on windows:
commandLine 'cmd', '/c', 'groovy ideainspect.groovy'
}