使用配置文件和 运行 服务器在 Maven 构建中集成 jQAssistant
Integrate jQAssistant in Maven build using profile and running server
我正在尝试将 jQAssistant 集成到我现有的 Maven 构建中。我有一个 POM 层次结构,但基本上顶层 POM 定义了构建的作用。那就是我的 <pluginManagement>
和我经常使用的构建插件的地方。我还有一些用于特殊构建的 Maven 配置文件。
因此,我想在构建期间扫描所有 类 并将结果聚合到 运行ning 服务器中,以便在构建我的所有 Maven 模块后拥有一个完全填充的 Neo4J 数据库。数据库应该包含我的整个代码库。
分析和检查将是不同的步骤,我不想在构建 Maven 模块时直接这样做。
我看到的例子都是建立一个本地数据库,然后对照它检查类。据我了解,我必须 运行 服务器作为守护进程,然后配置 Maven 插件以使用 'bolt' URI 来填充它 - 这样对吗?
此外,由于我不想减慢 'normal' 构建速度,我添加了一个 Maven 配置文件来激活 jQAssistant 扫描。然而,这只适用于我的顶级 POM,但不适用于任何其他 Maven project/module。配置文件的继承是正常且预期的 Maven 功能 - 那么我做错了什么?
这是我的父 POM。只是为了查看配置文件是否处于活动状态,我也添加了 PMD:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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>
<packaging>pom</packaging>
<groupId>foo</groupId>
<artifactId>parent</artifactId>
<version>1.50.0-SNAPSHOT</version>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>com.buschmais.jqassistant</groupId>
<artifactId>jqassistant-maven-plugin</artifactId>
<version>1.5.0</version>
<configuration>
<useExecutionRootAsProjectRoot>true</useExecutionRootAsProjectRoot>
</configuration>
</plugin>
</pluginManagement>
</build>
<profile>
<id>architecture</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>pmd</goal>
<goal>cpd</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.buschmais.jqassistant</groupId>
<artifactId>jqassistant-maven-plugin</artifactId>
<executions>
<execution>
<id>scan</id>
<goals>
<goal>scan</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</project>
当我在具有该父 POM 的 Maven 项目上 运行 mvn clean package -P architecture
时,我看到以下输出,表明配置文件处于活动状态:
09:30:12.316 [INFO]
09:30:12.316 [INFO] --- maven-pmd-plugin:3.5:pmd (default) @ util-type ---
09:30:15.073 [INFO]
09:30:15.073 [INFO] --- maven-pmd-plugin:3.5:cpd (default) @ util-type ---
09:30:15.976 [INFO]
然而,jqassistant-maven-plugin
不在。
现在,如果我将它添加到我的普通 <build>
插件中:
<build>
<plugins>
<plugin>
<groupId>com.buschmais.jqassistant</groupId>
<artifactId>jqassistant-maven-plugin</artifactId>
<executions>
<execution>
<id>scan</id>
<goals>
<goal>scan</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
然后我看到 父 POM 的 mvn clean package
的以下输出:
10:38:14.252 [INFO] --- jqassistant-maven-plugin:1.5.0:scan (scan) @ parent ---
10:38:15.684 [INFO] Loaded jQAssistant plugins [CDI, Common, Core Analysis, Core Report, EJB3, GraphML, JAX-RS, JPA 2, JSON, JUnit, Java, Java 8, Java EE 6, Maven 3, OSGi, RDBMS, Spring, TestNG, Tycho, XML, YAML].
10:38:15.952 [INFO] Connecting to store at 'file:/C:/jp/maven-parents/parent/target/jqassistant/store/'
10:38:20.058 [INFO] Initializing embedded Neo4j server 3.x
10:38:20.078 [INFO] Resetting store.
10:38:21.515 [INFO] Reset finished (removed 8453 nodes, 29427 relations).
10:38:22.372 [INFO] Entering C:/jp/maven-parents/parent/target/failsafe-reports
10:38:22.378 [INFO] Leaving C:/jp/maven-parents/parent/target/failsafe-reports (1 entries, 4 ms)
但是,在我的 Maven 项目中,我没有看到任何 jQAssistant 输出。
启动 mvn help:effective-pom -Parchitecture
为父项目和 Maven 模块提供相同的输出:
<plugin>
<artifactId>maven-pmd-plugin</artifactId>
<version>3.5</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>pmd</goal>
<goal>cpd</goal>
</goals>
<configuration>
...
</configuration>
</execution>
</executions>
<configuration>
...
</configuration>
</plugin>
<plugin>
<groupId>com.buschmais.jqassistant</groupId>
<artifactId>jqassistant-maven-plugin</artifactId>
<version>1.5.0</version>
<executions>
<execution>
<id>scan</id>
<goals>
<goal>scan</goal>
</goals>
<configuration>
<useExecutionRootAsProjectRoot>true</useExecutionRootAsProjectRoot>
</configuration>
</execution>
</executions>
<configuration>
<useExecutionRootAsProjectRoot>true</useExecutionRootAsProjectRoot>
</configuration>
</plugin>
在我的项目中,我有一个带有以下插件管理部分的父 POM:
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>com.buschmais.jqassistant</groupId>
<artifactId>jqassistant-maven-plugin</artifactId>
<version>${jqassistant.version}</version>
<configuration>
<useExecutionRootAsProjectRoot>true</useExecutionRootAsProjectRoot>
</configuration>
<executions>
<execution>
<id>scan</id>
<goals>
<goal>scan</goal>
</goals>
</execution>
<execution>
<id>analyze</id>
<goals>
<goal>analyze</goal>
</goals>
<configuration>
<failOnSeverity>MAJOR</failOnSeverity>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
我还定义了以下配置文件,我将其用于 运行 jQAsssistant:
<profile>
<id>verify-architecture</id>
<build>
<plugins>
<plugin>
<groupId>com.buschmais.jqassistant</groupId>
<artifactId>jqassistant-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</profile>
使用mvn -P verify-archicture clean install
我可以扫描和分析我的项目。
几年后我们到了:-)
回到我的错误!
这里的问题是 Maven 阶段。 jQAssistant 插件 Mojo scan
默认有 Maven 阶段 post-integration-test
。
但是,我们公司从不mvn clean install
,我们只mvn clean package
并使用 Jenkins、Nexus 等进行安装
所以,没有强制插件进入 package
阶段是我的错。
这就是它的工作原理:
<profile>
<id>jqassistant</id>
<build>
<plugins>
<plugin>
<groupId>com.buschmais.jqassistant</groupId>
<artifactId>jqassistant-maven-plugin</artifactId>
<executions>
<execution>
<id>scan-software</id>
<phase>package</phase>
<goals>
<goal>scan</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
我正在尝试将 jQAssistant 集成到我现有的 Maven 构建中。我有一个 POM 层次结构,但基本上顶层 POM 定义了构建的作用。那就是我的 <pluginManagement>
和我经常使用的构建插件的地方。我还有一些用于特殊构建的 Maven 配置文件。
因此,我想在构建期间扫描所有 类 并将结果聚合到 运行ning 服务器中,以便在构建我的所有 Maven 模块后拥有一个完全填充的 Neo4J 数据库。数据库应该包含我的整个代码库。
分析和检查将是不同的步骤,我不想在构建 Maven 模块时直接这样做。
我看到的例子都是建立一个本地数据库,然后对照它检查类。据我了解,我必须 运行 服务器作为守护进程,然后配置 Maven 插件以使用 'bolt' URI 来填充它 - 这样对吗?
此外,由于我不想减慢 'normal' 构建速度,我添加了一个 Maven 配置文件来激活 jQAssistant 扫描。然而,这只适用于我的顶级 POM,但不适用于任何其他 Maven project/module。配置文件的继承是正常且预期的 Maven 功能 - 那么我做错了什么?
这是我的父 POM。只是为了查看配置文件是否处于活动状态,我也添加了 PMD:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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>
<packaging>pom</packaging>
<groupId>foo</groupId>
<artifactId>parent</artifactId>
<version>1.50.0-SNAPSHOT</version>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>com.buschmais.jqassistant</groupId>
<artifactId>jqassistant-maven-plugin</artifactId>
<version>1.5.0</version>
<configuration>
<useExecutionRootAsProjectRoot>true</useExecutionRootAsProjectRoot>
</configuration>
</plugin>
</pluginManagement>
</build>
<profile>
<id>architecture</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>pmd</goal>
<goal>cpd</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.buschmais.jqassistant</groupId>
<artifactId>jqassistant-maven-plugin</artifactId>
<executions>
<execution>
<id>scan</id>
<goals>
<goal>scan</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</project>
当我在具有该父 POM 的 Maven 项目上 运行 mvn clean package -P architecture
时,我看到以下输出,表明配置文件处于活动状态:
09:30:12.316 [INFO]
09:30:12.316 [INFO] --- maven-pmd-plugin:3.5:pmd (default) @ util-type ---
09:30:15.073 [INFO]
09:30:15.073 [INFO] --- maven-pmd-plugin:3.5:cpd (default) @ util-type ---
09:30:15.976 [INFO]
然而,jqassistant-maven-plugin
不在。
现在,如果我将它添加到我的普通 <build>
插件中:
<build>
<plugins>
<plugin>
<groupId>com.buschmais.jqassistant</groupId>
<artifactId>jqassistant-maven-plugin</artifactId>
<executions>
<execution>
<id>scan</id>
<goals>
<goal>scan</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
然后我看到 父 POM 的 mvn clean package
的以下输出:
10:38:14.252 [INFO] --- jqassistant-maven-plugin:1.5.0:scan (scan) @ parent ---
10:38:15.684 [INFO] Loaded jQAssistant plugins [CDI, Common, Core Analysis, Core Report, EJB3, GraphML, JAX-RS, JPA 2, JSON, JUnit, Java, Java 8, Java EE 6, Maven 3, OSGi, RDBMS, Spring, TestNG, Tycho, XML, YAML].
10:38:15.952 [INFO] Connecting to store at 'file:/C:/jp/maven-parents/parent/target/jqassistant/store/'
10:38:20.058 [INFO] Initializing embedded Neo4j server 3.x
10:38:20.078 [INFO] Resetting store.
10:38:21.515 [INFO] Reset finished (removed 8453 nodes, 29427 relations).
10:38:22.372 [INFO] Entering C:/jp/maven-parents/parent/target/failsafe-reports
10:38:22.378 [INFO] Leaving C:/jp/maven-parents/parent/target/failsafe-reports (1 entries, 4 ms)
但是,在我的 Maven 项目中,我没有看到任何 jQAssistant 输出。
启动 mvn help:effective-pom -Parchitecture
为父项目和 Maven 模块提供相同的输出:
<plugin>
<artifactId>maven-pmd-plugin</artifactId>
<version>3.5</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>pmd</goal>
<goal>cpd</goal>
</goals>
<configuration>
...
</configuration>
</execution>
</executions>
<configuration>
...
</configuration>
</plugin>
<plugin>
<groupId>com.buschmais.jqassistant</groupId>
<artifactId>jqassistant-maven-plugin</artifactId>
<version>1.5.0</version>
<executions>
<execution>
<id>scan</id>
<goals>
<goal>scan</goal>
</goals>
<configuration>
<useExecutionRootAsProjectRoot>true</useExecutionRootAsProjectRoot>
</configuration>
</execution>
</executions>
<configuration>
<useExecutionRootAsProjectRoot>true</useExecutionRootAsProjectRoot>
</configuration>
</plugin>
在我的项目中,我有一个带有以下插件管理部分的父 POM:
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>com.buschmais.jqassistant</groupId>
<artifactId>jqassistant-maven-plugin</artifactId>
<version>${jqassistant.version}</version>
<configuration>
<useExecutionRootAsProjectRoot>true</useExecutionRootAsProjectRoot>
</configuration>
<executions>
<execution>
<id>scan</id>
<goals>
<goal>scan</goal>
</goals>
</execution>
<execution>
<id>analyze</id>
<goals>
<goal>analyze</goal>
</goals>
<configuration>
<failOnSeverity>MAJOR</failOnSeverity>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
我还定义了以下配置文件,我将其用于 运行 jQAsssistant:
<profile>
<id>verify-architecture</id>
<build>
<plugins>
<plugin>
<groupId>com.buschmais.jqassistant</groupId>
<artifactId>jqassistant-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</profile>
使用mvn -P verify-archicture clean install
我可以扫描和分析我的项目。
几年后我们到了:-)
回到我的错误!
这里的问题是 Maven 阶段。 jQAssistant 插件 Mojo scan
默认有 Maven 阶段 post-integration-test
。
但是,我们公司从不mvn clean install
,我们只mvn clean package
并使用 Jenkins、Nexus 等进行安装
所以,没有强制插件进入 package
阶段是我的错。
这就是它的工作原理:
<profile>
<id>jqassistant</id>
<build>
<plugins>
<plugin>
<groupId>com.buschmais.jqassistant</groupId>
<artifactId>jqassistant-maven-plugin</artifactId>
<executions>
<execution>
<id>scan-software</id>
<phase>package</phase>
<goals>
<goal>scan</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>