Rya*_*tts 9 dependencies m2eclipse java-ee maven m2e
我在使Eclipse符合测试范围的Maven依赖项时遇到了一些问题 - 它出现在构建路径上并且弄乱了eclipse的编译/ javadoc解析.
我一直在使用该javaee-api-6.0库来编译我的Java EE应用程序.
但是,出于单元测试的目的,我想访问的不仅仅是api - 我需要一个实现.所以我将嵌入式glassfish libs包含在这样的测试范围内:
<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>
Run Code Online (Sandbox Code Playgroud)
根据我的理解,由于<scope>test</scope>玻璃鱼依赖性,它不会被包括在常规compile阶段.
因为这两个依赖项都将包含在test-compile阶段中,所以我确定将glassfish依赖项置于javaee-api依赖项之前,以便在编译测试类时优先使用前者.因此,当仅使用Maven构建时,此配置不是问题.
但是,当使用m2e和Eclipse时,glassfish依赖项列在我的构建路径中:

因为在java-ee-api依赖项之前列出了glassfish依赖项,所以Eclipse似乎使用错误的lib(glassfish而不是java-ee-api)来验证/编译/查找javadoc.(实际上,我并不是100%确定编译使用的是错误的lib - 这取决于是否在Eclipse下使用Maven来执行验证代码时使用的编译,而且我不知道它是否存在 - 但是javadoc查找肯定引用了错误的lib)
除了在运行单元测试时,如何阻止Eclipse使用glassfish lib?我想确保我的编译/ javadoc查找在api上发生,而不是该api的特定实现.
Rya*_*tts 10
自从我第一次发布这个问题以来已经有一段时间了,但是:
除了在运行单元测试时,如何阻止Eclipse使用glassfish lib?
你不能.Eclipse与每个项目的一个构建路径的概念相关联,而m2e/m2e-wtp不能(或不会)克服此限制,如以下错误所述:
随着JEE7的发布,javaee-apijar文件现在包含真正可用的类文件.这意味着它可以在测试中使用,我不需要glassfish-embedded-all在pom文件中指定它之前的jar文件.
所以现在eclipse正在从正确的jar文件中提取源代码和javadoc(即javaee-api不是glassfish-embedded-all),我并不关心测试范围glassfish-embedded-all仍然在Eclipse中的类路径上.
它不是我最初提出的问题的解决方案,但它是我当时遇到的潜在问题的解决方案.也许它也会帮助别人.
小智 7
我一直在努力解决这个问题,最后找到了解决方案.您已安装m2e插件,但您还需要m2e wtp连接器,默认情况下不会安装.根据您的m2e版本,这是完全不同的.对于最新版本,请在"首选项" - >"Maven" - >"发现"下.点击"打开目录".选择M2E-WTP连接器.
安装完成后,右键单击您的项目并选择"Maven" - >"更新项目配置..."
你的pom.xml应如下所示:
<dependency>
<groupId>org.glassfish.main.extras</groupId>
<artifactId>glassfish-embedded-all</artifactId>
<version>3.1.2.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
Eclipse应该愉快地部署,单元测试应该在eclipse中执行,并且命令行上的maven也应该是可以接受的.
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
9428 次 |
| 最近记录: |