在我的POM中,我有这种依赖
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>0.10.0-RC1</version>
<scope>provided</scope>
</dependency>
</dependencies>
现在我正在尝试在Maven exec插件中使用它,如下所示:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<id>delombok-source</id>
<phase>generate-sources</phase>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>java</executable>
<arguments>
<argument>-classpath</argument>
<classpath>
<dependency>org.projectlombok:lombok</dependency>
</classpath>
<argument>lombok.core.Main</argument>
<argument>delombok</argument>
<argument>src/main/java</argument>
<argument>-d</argument>
<argument>target/src-delomboked</argument>
</arguments>
</configuration>
</plugin>
但是每次执行exec:exec
时,都会出现“java.lang.NoClassDefFoundError:lombok / core / Main”错误。一些测试显示这是因为依赖关系是在提供的范围中声明的
为什么exec插件不能使用提供的依赖项?第二,有没有办法让exec插件在不改变依赖范围的情况下使用该依赖?
答案 0 :(得分:7)
稍后找到答案:只需将其添加到您的配置
<classpathScope>compile</classpathScope>
事后看来,这是有意义的,因为lombok是一个编译时注释处理器,而不是运行时依赖。
答案 1 :(得分:2)
如果有人想知道如何在不修改pom的情况下执行此操作,您可以在命令中添加以下选项:-Dexec.classpathScope="compile"
例如,我正在使用:
mvn compile exec:java -Dexec.mainClass="my.package.MyMainClass" -Dexec.classpathScope="compile"
答案 2 :(得分:1)
您可能对lombok-maven-plugin感兴趣,而不是尝试使用exec-maven-plugin。