我的POM中有一个依赖项,需要将其设置为"provided“,以便在编译时不包括它,但它仍然可以在我的项目中引用。当我运行测试时,我希望相同的依赖项的作用域为"test“,这样我就不必手动将jar添加到我的类路径中。有没有办法做到这一点或达到类似的结果?
这背后的原因是,我在我的JBOSS lib目录中提供了一些常见的war,所以我希望使用这些war,并为构建的war保留它们的“提供”范围。但是,当我从命令行运行JUnits时,我希望使用存储库中的jar,而无需手动将其添加到类路径中。
提前感谢
发布于 2012-02-08 14:44:40
提供了,这很像编译,但表明您希望JDK或容器在运行时提供依赖项。例如,在为Java企业版构建web应用程序时,可以将对Servlet API和相关Java EE API的依赖项设置为所提供的范围,因为web容器提供了这些类。此作用域仅在编译和测试类路径上可用,并且不可传递。
我在maven 3.0.3中检查了它的工作情况。我也有同样的问题,我在编译和测试时需要有一个servlet依赖项,但没有编译进去,因为它是随应用程序服务器发行版一起提供的。
发布于 2011-05-10 14:29:37
您可以使用一个概要文件,该概要文件可以将这些依赖项声明为test,也可以将其声明为提供的依赖项--这取决于对您更方便的是什么:
<profiles>
<profile>
<id>whatever</id>
<activation>
<property>
<name>env</name>
<value>whatever</value>
</property>
</activation>
<dependencies>
<dependency>
<groupId>yours</groupId>
<artifactId>yours</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
</profile>
<profile>
<id>test</id>
<activation>
<property>
<name>env</name>
<value>test</value>
</property>
</activation>
<dependencies>
<dependency>
<groupId>yours</groupId>
<artifactId>yours</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</profile>
</profiles>
这些配置文件可以通过设置属性env来激活,但还有其他方法,f.e.默认激活--看看here吧。
发布于 2011-05-11 08:24:53
尝试声明依赖项两次,每次声明一个作用域。在Maven 2.2.1中工作。
当相同的工件两次出现在不同作用域的依赖关系树中时,在依赖关系解析中会发生令人困惑的事情,但我认为在您的情况下这不应该是问题。
https://stackoverflow.com/questions/5941100
复制相似问题