Как определить custom-rulesets.xml
в родительском проекте, чтобы он снова использовался в дочерних модулях ?
У меня есть пример проекта PMD, который работает хорошо ( вы можете проверьте позже ).
Однако у этого проекта maven нет дочерних элементов.
Структура проекта
pmd-java-14-example _.
|_ core
|_ tasks
пользовательских правил. xml
<?xml version="1.0"?>
<!-- https://github.com/pmd/pmd/blob/master/pmd-java/src/main/resources/rulesets/java/basic.xml -->
<!-- https://pmd.github.io/pmd/pmd_rules_java_codestyle.html#shortvariable -->
<ruleset
name="custom-ruleset"
xmlns="http://pmd.sourceforge.net/ruleset/2.0.0">
<description>
The Basic ruleset contains a collection of good practices which should be followed.
</description>
<rule ref="category/java/design.xml/SimplifiedTernary"/>
<rule ref="category/java/codestyle.xml/MethodArgumentCouldBeFinal"/>
<rule ref="category/java/codestyle.xml/LocalVariableCouldBeFinal"/>
<rule ref="category/java/errorprone.xml/AvoidDecimalLiteralsInBigDecimalConstructor"/>
<rule ref="category/java/bestpractices.xml/UnusedLocalVariable"/>
<rule ref="category/java/bestpractices.xml/UnusedPrivateField"/>
<rule ref="category/java/codestyle.xml/DuplicateImports"/>
<rule ref="category/java/codestyle.xml/ShortMethodName"/>
<rule ref="category/java/codestyle.xml/ShortVariable"/>
</ruleset>
Когда у меня есть родительский pom и дочерний модуль, pmd завершается сбоем для дочернего модуля, поскольку он не может найти пользовательских наборов правил. xml .
pom. xml (родительский pom с дочерним модулем).
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yk.utils</groupId>
<artifactId>pmd-java-14-example</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<java.version>14</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<pmd.plugin.version>3.13.0</pmd.plugin.version>
<pmd.core.version>6.23.0</pmd.core.version>
</properties>
<modules>
<module>core</module>
<module>tasks</module>
</modules>
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.7</version>
</dependency>
</dependencies>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jxr-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</reporting>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>${pmd.plugin.version}</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<configuration>
<failOnViolation>true</failOnViolation>
<printFailingErrors>true</printFailingErrors>
<targetJdk>${java.version}</targetJdk>
<rulesets>
<!-- https://maven.apache.org/plugins/maven-pmd-plugin/examples/usingRuleSets.html -->
<ruleset>/rulesets/java/maven-pmd-plugin-default.xml</ruleset>
<!-- https://github.com/pmd/pmd/blob/master/pmd-java/src/main/resources/rulesets/java/basic.xml -->
<!-- https://github.com/pmd/pmd/blob/master/pmd-core/src/main/resources/rulesets/internal/all-java.xml -->
<ruleset>/category/java/bestpractices.xml</ruleset>
<ruleset>
custom-ruleset.xml
</ruleset>
</rulesets>
</configuration>
<executions>
<execution>
<id>check pmd and fail</id>
<phase>package</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>net.sourceforge.pmd</groupId>
<artifactId>pmd-java</artifactId>
<version>${pmd.core.version}</version>
</dependency>
<dependency>
<groupId>net.sourceforge.pmd</groupId>
<artifactId>pmd-core</artifactId>
<version>${pmd.core.version}</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.9.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</build>
</project>
Разница в том, что теперь pom имеет дочерние модули и <packaging>pom</packaging>
.
Эта часть не проходит mvn clean install
<ruleset>custom-ruleset.xml</ruleset>
Сообщения об ошибках
[INFO]
[INFO] pmd-java-14-example ................................ SUCCESS [ 0.922 s]
[INFO] core ............................................... FAILURE [ 1.929 s]
[INFO] tasks .............................................. SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.980 s
[INFO] Finished at: 2020-05-03T13:15:45+02:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-pmd-plugin:3.13.0:pmd (pmd) on project bst-core: Execution pmd of goal org.apache.maven.plugins:maven-pmd-plugin:3.13.0:pmd failed: org.apache.maven.reporting.MavenReport
Exception: Could not find resource 'pmd-java-14-example\core\custom-ruleset.xml'. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
Что я пробовал
Как я понимаю, maven использует custom-rulesets.xml
файл для родительских модулей - это успешно, затем он пытается использовать этот файл для дочернего модуля, и, конечно, этот файл отсутствует в дочернем модуле.
Я попытался установить свойство - absolute p до места нахождения custom-rulesets.xml
. Это работает, однако, я не могу положить sh его в github.
Я также могу сделать pu sh это пользовательское правило, установленное на git hub, добавить ссылку на репозиторий и файл github и использовать его. Это лучшая альтернатива.
И, конечно, я не хочу копировать и вставлять этот файл в разные дочерние модули.