我试图了解maven个人资料并遇到了以下问题。
这是我的简化示例,我有两个maven项目,项目A和项目B.
项目A对项目B具有编译时maven依赖性。
当maven配置文件“TEST”处于活动状态时,项目B包含运行时依赖项(比如项目C)。
所以问题是我运行项目A时生成的类路径。它没有项目C,即使项目A的TEST配置文件是活动的。
这是使用eclipse Helios服务版本1,Maven Integration for Eclipse插件vrs 0.10.2.20100623-1649
任何想法?
答案 0 :(得分:0)
我不确定配置文件是处理TEST的最佳方式。
使用配置文件更改依赖关系将更改生成的项目的POM。 如果在激活TEST的情况下安装Project B,则将添加运行时依赖项。 (无论什么项目A简介)。
传递性不会添加可选的依赖项。您需要在项目A中添加依赖项。
答案 1 :(得分:0)
我刚在Eclipse中使用m2eclipse 0.12.x进行了测试。第二个项目pom.xml如下所示:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.test</groupId>
<artifactId>test2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<profiles>
<profile>
<id>TEST</id>
<dependencies>
<dependency>
<groupId>org.test</groupId>
<artifactId>test1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</profile>
</profiles>
</project>
然后我在项目属性对话框中将配置文件TEST设置为Maven面板上的活动状态,并确保在那里启用Workspace的依赖关系解析。
之后,您可以从test2项目的src/main/java
运行任何类,生成的类路径如下所示:
C:\Dev\Java1.6\bin\javaw.exe -Dfile.encoding=Cp1252
-classpath C:\Dev\Workspace\test2\target\classes;C:\Dev\Workspace\test1\target\classes org.test2.Test2
请注意,运行时作用域的依赖关系仅适用于Eclipse中的“Java Application”启动配置类型,但不适用于“JUnit”启动配置,它使用m2eclipse的JDT集成提供的不同类路径解析器。
答案 2 :(得分:0)
似乎依赖项目的配置文件中的依赖项(传递)不会给依赖于它们的人提供运行时依赖性,这看起来很奇怪。
解决方法是将配置文件(包含依赖项)添加到父级,然后子级继承依赖项。
即。将一个父母介绍给A,我可以将它们直接放在A中,如YMomb所建议的那样。但是我需要解决这个问题的继承方面因为我有很多项目为。