I am working on a project where we want to use the plexus-compiler-eclipse
plugin during a Jenkins pipeline to check for increases in the number of warnings generated by the Eclipse compiler. We still want to use the javac
compiler for the normal build and test stage, so I am trying to create a maven profile we can run during the warnings stage that utilizes the Eclipse compiler.
When I run the Eclipse compiler over our code, I get a compile error about JAXB dependencies being missing. I know this is due to our move to Java 11 from Java 1.8, but we do not get this error when building with the javac
compiler. I have tried adding the jakarta.xml.bind-api
dependency to the maven-compiler-plugin
, but this does not help, nor does adding the org.glassfish.jaxb
dependency or the javax.xml.bind:jaxb-api
dependency.
I cannot share the full pom because this project is proprietary, but the profile I’m building looks like this:
<profile> <id>eclipse-compile</id> <activation> <activeByDefault>false</activeByDefault> </activation> <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1></version> <configuration> <compilerId>eclipse</compilerId> <source>${java.version}</source> <target>${java.version}</target> <compilerArguments> <properties>${project.basedir}/.settings/org.eclipse.jdt.core.prefs</properties> </compilerArguments> </configuration> <dependencies> <dependency> <groupId>org.codehaus.plexus</groupId> <artifactId>plexus-compiler-eclipse</artifactId> <version>2.8.8</version> </dependency> <dependency> <groupId>org.eclipse.jdt</groupId> <artifactId>ecj</artifactId> <version>3.25.0</version> </dependency> </dependencies> </plugin> </plugins> </pluginManagement> </build> </profile>
I was putting the various JAXB dependencies I tried in the <dependencies>
section under the org.eclipse.jdt
entry.
Anyone else encounter this or know what to do about it?
Advertisement
Answer
The issue stemmed from the Maven build running in Java 11 but our normal compile stage forking to a Java 1.8 executable. Because the Plexus compiler cannot fork to a new environment, there was not a way for it to access the Java EE dependencies. We just need to update our entire project to be compatible with Java 11 at compile-time.