我在让 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 按预期工作
据我了解,由于<scope>test</scope>
glassfish 的依赖,它不会包含在常规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 的特定实现。