Unable to locate Source XRef to link to

JavaMavenMaven 3Pmd

Java Problem Overview


I have a big maven project that uses the pmd plugin for code quality checks.

since I started using the pmd plugin i get the following warning message:

[WARNING] Unable to locate Source XRef to link to - DISABLED

I googled and found that i need to implement the jxr plugin.

so I add the following to the build property in the main pom.xml file.

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jxr-plugin</artifactId>
    <version>2.3</version>
  </plugin>

welp it doesn't really change anything.

any ideas what I need to implement in order to resolve this warning message?

output of mvn -version

Apache Maven 3.0.4 (r1232337; 2012-01-17 10:44:56+0200)
Maven home: /usr/share/maven-bin-3.0
Java version: 1.7.0_05, vendor: Oracle Corporation
Java home: /usr/lib64/icedtea7/jre
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "3.5.2-gentoo", arch: "amd64", family: "unix"

thanks!

Java Solutions


Solution 1 - Java

You should add the maven-jxr-plugin to the reportingPlugin section.

<reporting>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jxr-plugin</artifactId>
            <version>2.3</version>
        </plugin>
    </plugins>
</reporting>

Re run it and enjoy.

BTW, maybe you'll need to run once the jxr:jxr goal to first generate some file that will be used by pmd.

Solution 2 - Java

Mind there is also the ability to disable the xref feature by adding

<configuration>
  <linkXRef>false</linkXRef>
</configuration>

to the maven-pmd-plugin plugin. This resolves the warning without making the build even longer due to running an additional reporting plugin. E.g. if you run your builds in Jenkins, the Jenkins PMD plugin can take care of relating PMD warnings to source code, there is no need to run another Maven plugin for this.

Solution 3 - Java

You should add the maven-jxr-plugin and run the jxr:jxr goal before the site lifecycle if the maven-jxr-plugin is added as a plugin like in your case:
clean jxr:jxr site

Otherwise you should add it as a report if you want it to work with mvn site. Take a look at the JXR Usage Documentation : JXR Usage

Solution 4 - Java

It is way easier to configure it this way and not tie it to the site phase.

Then, it is as simple as mvn test.

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.8.1</version>
      <configuration>
        <source>1.8</source>
        <target>1.8</target>
      </configuration>
    </plugin>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>${maven-surefire-plugin.version}</version>
      <dependencies>
        <dependency>
          <groupId>org.junit.platform</groupId>
          <artifactId>junit-platform-surefire-provider</artifactId>
          <version>1.2.0</version>
        </dependency>
        <dependency>
          <groupId>org.junit.jupiter</groupId>
          <artifactId>junit-jupiter-engine</artifactId>
          <version>${junit.jupiter.version}</version>
        </dependency>
      </dependencies>
      <configuration>
      <testSourceDirectory>src/test/java</testSourceDirectory>
      <includes>
        <include>com.whatever.suite.*</include>
      </includes>
      <systemPropertyVariables>
        <selenide.remote>${grid.hub}</selenide.remote>
      </systemPropertyVariables>
      <trimStackTrace>false</trimStackTrace>
    </configuration>
  </plugin>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-report-plugin</artifactId>
    <version>${maven-surefire-plugin.version}</version>
    <configuration>
      <outputDirectory>target/surefire-reports</outputDirectory>
      <linkXRef>false</linkXRef>
    </configuration>
    <executions>
      <execution>
        <id>during-tests</id>
        <phase>test</phase>
        <goals>
          <goal>report</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
</plugins>

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionufkView Question on Stackoverflow
Solution 1 - JavapoussmaView Answer on Stackoverflow
Solution 2 - JavarecView Answer on Stackoverflow
Solution 3 - JavaM3HD1View Answer on Stackoverflow
Solution 4 - JavadjangofanView Answer on Stackoverflow