本文介紹了Maven 3-如何添加批注處理器依賴?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我需要對我的項目源代碼運行批注處理器。批注處理器不應成為項目的可傳遞依賴項,因為它只用于批注處理而不需要其他任何東西。
以下是我為此使用的完整(非工作)測試POM:
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>test</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>Test annotations</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<hibernate-jpamodelgen.version>1.2.0.Final</hibernate-jpamodelgen.version>
</properties>
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<annotationProcessors>
<annotationProcessor>
org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</annotationProcessor>
</annotationProcessors>
<debug>true</debug>
<optimize>true</optimize>
<source>1.6</source>
<target>1.6</target>
<compilerArguments>
<AaddGeneratedAnnotation>true</AaddGeneratedAnnotation>
<Adebug>true</Adebug>
</compilerArguments>
</configuration>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>${hibernate-jpamodelgen.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
我在測試的插件配置中將org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
顯式定義為批注處理器,我知道它不應該是必需的。
我遇到的問題是hibernate-jpamodelgen
依賴項未添加到編譯器類路徑,因此找不到批注處理器,構建失敗。
按照這個answer,我嘗試將依賴項添加為構建擴展(不確定我是否理解它們應該是什么!)如下所示:
<extensions>
<extension>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>${hibernate-jpamodelgen.version}</version>
</extension>
</extensions>
這也不會將hibernate-jpamodelgen
添加到編譯器類路徑。
到目前為止,我發現唯一有效的方法是將依賴項添加到<dependencies>
部分中的項目中。這有一個不幸的副作用,那就是添加hibernate-jpamodelgen
作為傳遞依賴項,這是我想要避免的。
我之前的工作設置使用maven-processor-plugin
插件來實現我想要的功能。然而,eclipse M2E不支持該插件,并且最新版本的maven-compiler-plugin
現在可以正確處理多個編譯器參數,所以我更喜歡使用后者。
推薦答案
添加依賴項為optional dependency(<optional>true</optional>
)。這將在編譯下添加依賴項,但會阻止它成為可傳遞依賴項:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>${hibernate-jpamodelgen.version}</version>
<optional>true</optional>
</dependency>
如果您要在此模塊中創建一個包含所有依賴項的構件(如.war),則可以使用<scope>provided</scope>
。這既防止了依賴項是可傳遞的,也防止了依賴項包含在模塊生成的構件中。
這篇關于Maven 3-如何添加批注處理器依賴?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,