本文介紹了Maven 3-如何添加批注處理器依賴?的處理方法,對(duì)大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問題描述
我需要對(duì)我的項(xiàng)目源代碼運(yùn)行批注處理器。批注處理器不應(yīng)成為項(xiàng)目的可傳遞依賴項(xiàng),因?yàn)樗挥糜谂⑻幚矶恍枰渌魏螙|西。
以下是我為此使用的完整(非工作)測(cè)試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>
我在測(cè)試的插件配置中將org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
顯式定義為批注處理器,我知道它不應(yīng)該是必需的。
我遇到的問題是hibernate-jpamodelgen
依賴項(xiàng)未添加到編譯器類路徑,因此找不到批注處理器,構(gòu)建失敗。
按照這個(gè)answer,我嘗試將依賴項(xiàng)添加為構(gòu)建擴(kuò)展(不確定我是否理解它們應(yīng)該是什么!)如下所示:
<extensions>
<extension>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>${hibernate-jpamodelgen.version}</version>
</extension>
</extensions>
這也不會(huì)將hibernate-jpamodelgen
添加到編譯器類路徑。
到目前為止,我發(fā)現(xiàn)唯一有效的方法是將依賴項(xiàng)添加到<dependencies>
部分中的項(xiàng)目中。這有一個(gè)不幸的副作用,那就是添加hibernate-jpamodelgen
作為傳遞依賴項(xiàng),這是我想要避免的。
我之前的工作設(shè)置使用maven-processor-plugin
插件來(lái)實(shí)現(xiàn)我想要的功能。然而,eclipse M2E不支持該插件,并且最新版本的maven-compiler-plugin
現(xiàn)在可以正確處理多個(gè)編譯器參數(shù),所以我更喜歡使用后者。
推薦答案
添加依賴項(xiàng)為optional dependency(<optional>true</optional>
)。這將在編譯下添加依賴項(xiàng),但會(huì)阻止它成為可傳遞依賴項(xiàng):
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>${hibernate-jpamodelgen.version}</version>
<optional>true</optional>
</dependency>
如果您要在此模塊中創(chuàng)建一個(gè)包含所有依賴項(xiàng)的構(gòu)件(如.war),則可以使用<scope>provided</scope>
。這既防止了依賴項(xiàng)是可傳遞的,也防止了依賴項(xiàng)包含在模塊生成的構(gòu)件中。
這篇關(guān)于Maven 3-如何添加批注處理器依賴?的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,