【发布时间】:2012-02-24 07:27:29
【问题描述】:
我在让 Eclipse 支持测试范围的 Maven 依赖项时遇到了一些问题 - 它出现在构建路径上并与 eclipse 的编译/javadoc 解析混淆。
Java EE 库示例
我一直在使用 javaee-api-6.0 库来编译我的 Java EE 应用程序。
但是,出于单元测试的目的,我希望访问的不仅仅是 api - 我需要一个实现。所以我将嵌入式 glassfish 库包含在一个测试范围内,如下所示:
<repositories>
<repository>
<id>glassfish-extras-repository</id>
<url>http://download.java.net/maven/glassfish/org/glassfish/extras</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.glassfish.extras</groupId>
<artifactId>glassfish-embedded-all</artifactId>
<version>3.1.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>compile</scope>
<type>jar</type>
</dependency>
</dependencies>
在 Maven 中按预期工作
据我了解,由于 glassfish 依赖的<scope>test</scope>,它不会包含在常规的compile 阶段。
因为这两个依赖项都将包含在test-compile 阶段,所以我确定将 glassfish 依赖项放在 javaee-api 依赖项之前,以便在编译测试类时优先使用前者而不是后者。因此,当只使用 Maven 构建时,这种配置是没有问题的。
在 Eclipse 中无法按预期工作
但是,当使用 m2e 和 Eclipse 时,glassfish 依赖项在我的构建路径中列出:
由于 glassfish 依赖项列在 java-ee-api 依赖项之前,因此 Eclipse 似乎使用了错误的库(glassfish,而不是 java-ee-api)来验证/编译/查找 javadocs。 (实际上,我不是 100% 确定编译使用了错误的库 - 这取决于 Eclipse 是否在后台使用 Maven 来执行验证代码时使用的编译,我不知道是否是 - 但是javadoc 查找肯定引用了错误的库)
问题
除了在运行单元测试时,如何阻止 Eclipse 使用 glassfish 库?我想确保我的编译/javadoc 查找发生在 api 上,而不是该 api 的特定实现。
【问题讨论】:
标签: jakarta-ee maven dependencies m2eclipse m2e