Initial Setup
To integrate Parasoft Jtest with Maven, you need to modify the Maven settings in one of the following settings.xml
files:
$M2_HOME/conf/settings.xml
- global settings located in the Maven installation directory$HOME/.m2/settings.xml
- user settings located in the.m2
folder the user's home directory
If both files exist, the user-specific will overwrite the global settings.
You can copy the global settings from your Maven installation to the $HOME/.m2
directory, use it as a template, and modify according to the instructions below.
Certain tools, such as continuous integration (CI) servers and IDEs, may come with embedded Maven, which relies only on user settings and ignores global settings. In such cases, ensure that the user settings contain all modifications that are required for Jtest integration.
Configure the following settings in your settings.xml
file:
<pluginRepository>
- specifies the path to the local Maven repository shipped with Jtest in [INSTALL_DIR]\integration\maven<pluginGroups>
- specifies the appropriate groupids, artifactids, and goals to simplify calling the plugin from the command line- the
jtest.home
property - specifies the path to the Jtest installation directory to simplify calling the plugin from the command line
Your settings.xml file may resemble the following:
<settings> <!-- ... --> <pluginGroups> <!-- ... --> <pluginGroup>com.parasoft.jtest</pluginGroup> <pluginGroup>com.parasoft.jtest.tia</pluginGroup> </pluginGroups> <profiles> <!-- ... --> <profile> <id>jtest-settings-profile</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <jtest.home>PATH/TO/JTEST</jtest.home> </properties> <pluginRepositories> <pluginRepository> <id>jtest-local</id> <url>file://${jtest.home}/integration/maven</url> </pluginRepository> </pluginRepositories> </profile> </profiles> <mirrors> <!-- ... --> <!-- prevention against mirrors with wildcard (*) matching --> <mirror> <id>jtest-local-mirror</id> <mirrorOf>jtest-local</mirrorOf> <!-- mirrors tag does not support properties --> <url>file://PATH/TO/JTEST/integration/maven</url> <!-- properties are not resolved in this tag --> </mirror> </mirrors> </settings>
Configuring Jtest Execution
There are several ways to configure how Jtest analyzes and tests code:
- By configuring the plugin parameters directly in your project's
pom.xml
file - In a
.properties
file provided with the<settings>
or<settingsList>
plugin parameters in thepom.xml
file - With the Maven command line options
-Djtest
or-Dproperty
- In the
jtestcli.properties
file in the Jtest installation directory or your HOME directory (see Configuration Overview)
We recommend configuring the jtest
goal execution directly in the command line or in the POM file.
Hierarchy
If you configure analysis with Maven and provide the user property as a variable (${...}
), the following hierarchy will be applied:
-Djtest.[Maven property name]
(e.g.,-Djtest.settings="my.general.properties"
).- the
pom.xml
file -Dproperty.[property name]
(e.g.,-Dproperty.
dtp.url=https://server1.mycompany.com:8443
)
If the property is hardcoded, ie. provided as a real value in pom.xml
, it has priority and cannot be overridden by command line settings. This results in the following hierarchy:
- the
pom.xml
file -Djtest.[Maven property name]
(e.g.,-Djtest.settings="my.general.properties"
).-Dproperty.[property name]
(e.g.,-Dproperty.
dtp.url=https://server1.mycompany.com:8443
)
For example, the test configuration specified in pom.xml
as a user property <config>${jtest.config}</config>
can be overridden with -Djtest.config
. If it is hardcoded as <config>builtin://Demo Configuration</config>
, it cannot be overridden.
The settings provided in the
jtestcli.properties
file always have the lowest priority.
Configuring Analysis in the POM File
You can configure analysis by providing appropriate plugin parameters directly in the pom.xml
file of your project. See Jtest Goals Reference for Maven for the list of configuration parameters.
The plugin configuration in the pom.xml
file may resemble the following:
<project> <!-- ... --> <build> <!-- ... --> <plugins> <!-- ... --> <plugin> <groupId>com.parasoft.jtest</groupId> <artifactId>jtest-maven-plugin</artifactId> <version>2020.1.0</version> <configuration> <settings>settings.properties</settings> <config>builtin://Recommended Rules</config> <resources> <resource>**/my/package/**/*.java</resource> <resource>**/*.xml</resource> </resources> <exclude>**/test/**</exclude> <report>report_dir</report> <publish>true</publish> </configuration> </plugin> </plugins> </build> </project>
All the properties shown in the example are optional.
Disable inheritance
By default, Jtest performs analysis of every project (module) when generating a report for the root project. For this reason, it is important to include the <inherited>false</inherited>
tag in your POM to prevent redundant analysis of every nested module.
Configuring Analysis in the Command Line
You can configure analysis directly in the Maven command line by passing appropriate settings with the -D
command line options:
-Djtest.[setting]
allows you to configure the settings dedicated for execution of the Jtest Plugin for Maven; see Jtest Goals Reference for Maven.
Example:mvn jtest:jtest -Djtest.config="builtin://Critical Rules"
-Dproperty.[setting]
allows you to configure any of the Jtest settings (see Configuration Settings) provided as the KEY=VALUE pattern.
Example:mvn jtest:jtest -Dproperty.console.vebosity.level=high
See Hierarchy for information about the hierarchical order the settings are applied.
Examples
Example 1. The following command line analyzes every module of the analyzed build using the default builtin://Recommended Rules
test configuration:
mvn jtest:jtest
Example 2. The following analysis is configured with two .properties files passed with the jtest.settingsList
option. The test configuration and the analysis scope are passed with jtest.config
and jtest.resource
respectively. Jtest will analyze the files of the "my.groupId:my-artifacId" project that match the pattern "/src/main/java/my/package/**/*.java".
mvn jtest:jtest -Djtest.config="builtin://Critical Rules" -Djtest.resource="my.groupId:my-artifacId/src/main/java/my/package/**/*.java" -Djtest.settingsList="project.specific.properties","/etc/jtest/license.properties"
Example 3. The following analysis is configured with the .properties file passed with the jtest.settings
option. The test configuration is passed with jtest.config
. The property.console.verbosity
command line option overwrites the console.verbosity
option specified in the .properties file.
mvn jtest:jtest -Djtest.config="builtin://Recommended Rules" -Djtest.settings="my.general.properties" -Dproperty.console.verbosity.level=high
Manual Customization of Compilation Data in the POM File
In rare cases, a large number of build plugins that perform compilation and highly customized Maven builds may lead to gaps or errors in the compilation data automatically detected by the Jtest Plugin for Maven. Jtest reports such issues in the Setup Problems section of the generated report.
If you verify that the detected compilation data contains errors, you can extend or override the data in the POM file of the analyzed module.
The following example shows customized compilation data of an analyzed Maven sumbodule. The configuration is extended with an additional classpath element, and specifies a new source level for the module. The compilation id is not specified, so the default compilation id will be used (default-compile is the default id for execution of maven-compiler-plugin).
<project> <!-- ... --> <build> <!-- ... --> <plugins> <!-- ... configuration with non default compiler plugin appending ${extra-classpath-element} and changing sourcelevel which cannot be detected automatically --> <plugin> <groupId>com.parasoft.jtest</groupId> <artifactId>jtest-maven-plugin</artifactId> <version>2020.1.0</version> <configuration> <compilation> <!-- no id specified so Maven default: "default-compile" id will be used --> <classpath> <path>${extra-classpath-element}</path> </classpath> <sourcelevel>1.6</sourcelevel> </compilation> </configuration> </plugin> </plugins> </build> </project>
If you need to modify compilation data for all projects, you can use the
-Djtest.dataUpdate
command line option.
See Compilation Data Model for more information about how to customize compilation data automatically detected by the Jtest plugins.