在处理arch4u-pmd项目期间,我们制定了几个基于java的pmd规则,在基于XML的规则集< code>our-rules.xml中配置它们,并将其作为普通的java库/工件(< code > io . github . ABC:my-PMD-rules:0 . 1 . 0 )发布到我们的工件存储库中。工件结构如下所示:
> unzip -l my-pmd-rules-0.1.0.jar
Archive: my-pmd-rules-0.1.0.jar
Length Date Time Name
--------- ---------- ----- ----
0 02-15-2022 00:24 META-INF/
139 02-15-2022 00:24 META-INF/MANIFEST.MF
0 02-15-2022 00:24 io/
0 02-15-2022 00:24 io/github/
0 02-15-2022 00:24 io/github/rules/
...
4781 02-15-2022 00:24 io/github/rules/MissingMandatoryAnnotation.class
...
1138 02-15-2022 00:24 io/github/rules/our-rules.xml
...
我们如何使用pmd插件将它们添加到Gradle项目中?
我们必须处理以下材料/问题/答案:
tasks.withType(Pmd) {
pmdClasspath += file("path/to/rules.jar")
}
在Gradle pmd插件的官方文档中,有一个依赖性部分,在没有实际示例的情况下从高层解释了这一方面:
pmd
- 要使用的 PMD 库pmdAux
- 在分析期间可用于类型解析的附加库。如果 PMD 抱怨缺少类,这可能很有用。为了将自定义java规则添加到项目中
>
使用Gradle插件
apply plugin: 'pmd'
repositories {
mavenCentral() // if your rules in Maven Central
mavenLocal() // if your rules is in .m2 folder
maven {
// if your rules are in some custom/self-hosted artifacts repository like Nexus
}
}
dependencies {
...
pmd "io.github.abc:my-pmd-rules:0.1.0"
pmd "commons-io:commons-io:2.11.0" // required dependency by pmd engine
...
}
pmd {
consoleOutput = true
ruleSetFiles = files("io/github/rules/our-rules.xml") // exactly path as in your lib classpath
ruleSets = [] // Keep it as is, workaround for pmd
}
使用Maven插件
...
<build>
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>3.15.0</version>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
<configuration>
<printFailingErrors>true</printFailingErrors>
<rulesets>
...
<ruleset>io/github/rules/our-rules.xml</ruleset> <!-- exactly path as in your lib classpath -->
...
</rulesets>
<excludeRoots>
<excludeRoot>target/generated-sources/</excludeRoot>
</excludeRoots>
</configuration>
<dependencies>
<!-- your custom rules -->
<dependency>
<groupId>io.github.abc</groupId>
<artifactId>my-pmd-rules</artifactId>
<version>0.1.0</version>
</dependency>
</dependencies>
</plugin>
...
</plugins>
</build>
...
如果您已经有一个规则集,并且只想包含自定义 Java 规则(来自库),则可以按原样直接在规则集 xml 中定义它:
<!-- Define a rule -->
<rule name="TheRuleName"
language="java"
externalInfoUrl="https://link.to.your.rule.official.docs.com"
message="The violation message regarding your rule"
class="io.github.rules.MissingMandatoryAnnotation">
<priority>3</priority>
<properties>
...
</properties>
</rule>
问题内容: 我的公司最近写了gradle插件来进行原始配置(存储库,项目间的通用依赖关系等)。总体而言,这大大简化了我们的构建过程,并发现了项目之间的一些不一致之处。我们最近尝试向插件添加任务,但该任务无法正常工作。 这是坏掉的插件: 除了之外,此插件都很好用。当我将其添加到混合中(并编译/部署到我们的本地仓库)时,当我尝试构建使用插件的项目时出现此错误: 问题答案: 在脚本中定义任务时,将调用方
我无法在gradle项目中添加自定义源代码集。如何初始化这里的版本号?我的gradle文件看起来像:
我想从maven转到gradle。 在pom中。xml文件我有一个自定义存储库: 它是一个简单的超文本传输协议Web服务器,带有. jar文件。 如何将此自定义回购添加到生成中。格拉德尔? 我尝试了此代码,但不起作用: 我的定制repo不是maven repo,但我在Gradle文档中没有找到可以指定URL的其他示例。
我正在尝试用Java编写自定义PMD规则。我创建了一个自定义规则集,如下所示: 我调用使用这个Java类: 不幸的是,找不到我用Java编写的自定义规则;这是来自PmdStarter的消息: 找不到mwe的班级。习惯规则 这是我的(最小)自定义规则: 这是我在Eclipse中的项目结构: 我在这里读到,这种错误似乎是类路径错误。读完这篇文章后,我把放在项目中的几个目录中,希望PMD能找到它。 我的
问题内容: 我收到此错误 %gradle build [ant:javac] Hello.java:2:错误:包javax.persistence不存在Hello.java:2:导入javax.persistence。*; 我应该添加到gradle.build包括什么 /opt/glassfish3/glassfish/modules/javax.persistence.jar 谢谢 问题答案:
从这篇文章(向IntelliJ项目添加Gradle支持的最佳方式)中,我可以看到我需要做的是“在项目的根目录中添加build.Gradle” 我希望有人能解释一下我是怎么用intelliJ做的?(一直在搜索和阅读——仍然困惑不解)。 我理解一个根目录文件夹是所有项目源的父文件夹,但在intelliJ的标准JavaFX项目中,它是什么/我如何找到它/分配它,然后我如何添加build.gradle?