I am trying to make my own Javac plugin but things aren’t going so well already 🙁 I am following this tutorial: https://www.baeldung.com/java-build-compiler-plugin and when I want to test the first basic plugin it can’t find it.
When I enter the following command:
javac -cp ./target/classes/javacplugin/ -Xplugin:Getter ./src/main/java/javacPlugin/App.java
I get this error:
plug-in not found: Getter
How do I solve this issue?
This is my sourcetree:
This is my code for the plugin:
package javacplugin; import com.sun.source.util.JavacTask; import com.sun.source.util.Plugin; import com.sun.tools.javac.api.BasicJavacTask; import com.sun.tools.javac.util.Context; import com.sun.tools.javac.util.Log; /** * JavacPlugin */ public class JavacPlugin implements Plugin { @Override public String getName() { return "Getter"; } @Override public void init(JavacTask task, String... arg1) { Context context = ((BasicJavacTask) task).getContext(); Log.instance(context).printRawLines(Log.WriterKind.NOTICE, "Hello from " + getName()); } }
This is what’s inside of com.sun.source.util.Plugin
:
javacplugin.JavacPlugin
This is my pom.xml:
<?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> <groupId>javacplugin</groupId> <artifactId>javacplugin</artifactId> <version>1</version> <name>javacplugin</name> <!-- FIXME change it to the project's website --> <url>http://www.example.com</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>com.sun</groupId> <artifactId>tools</artifactId> <version>1.8.0</version> <scope>system</scope> <systemPath>${java.home}/../lib/tools.jar</systemPath> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> <build> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle --> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.1.0</version> </plugin> <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging --> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <compilerArgs> <arg>-Xplugin:Getter</arg> </compilerArgs> </configuration> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.1</version> </plugin> <plugin> <artifactId>maven-jar-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> </plugin> <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle --> <plugin> <artifactId>maven-site-plugin</artifactId> <version>3.7.1</version> </plugin> <plugin> <artifactId>maven-project-info-reports-plugin</artifactId> <version>3.0.0</version> </plugin> </plugins> </pluginManagement> </build> </project>
Advertisement
Answer
I have solved it:
javac -cp ./target/classes -Xplugin:Getter ./src/main/java/javacPlugin/App.java
Is the right command, without /javacplugin
.