我想在我的战争中包含(maven)依赖关系,同时确保它们在运行时或测试范围内为而不是。我如何仅在我的战争中包含依赖关系?
的问题如下:
有一些罐子(假设罐子A,B和C),我需要在我的战争。这是因为使用了CDI。
我有一些使用项目产生的战争的集成测试。这些集成测试是基于arquillian的测试。
但是,我有其他的测试是而不是集成测试,将受到在类路径中包括罐子A,B和C的不利影响。
我想在我的战争中包含(maven)依赖关系,同时确保它们在运行时或测试范围内为而不是。我如何仅在我的战争中包含依赖关系?
的问题如下:
有一些罐子(假设罐子A,B和C),我需要在我的战争。这是因为使用了CDI。
我有一些使用项目产生的战争的集成测试。这些集成测试是基于arquillian的测试。
但是,我有其他的测试是而不是集成测试,将受到在类路径中包括罐子A,B和C的不利影响。
不错的选择:
啊哈!通过使用surefire插件,可以从测试阶段中排除某些依赖项。这在StackOverflow answer中有描述。
这样我就可以创建我的战争并且不在测试范围内拥有依赖关系(感谢Peter Mularien)!
坏选项:
它看起来像Maven的组装插件需要你有任何include
依赖于依赖范围也可提供。由于test
是最小的作用域,因此不可能在战争中包含依赖项,而不能在项目的测试范围内使用它。
maven war插件不允许包含(或排除)依赖项。
另一种选择是创建第二个“分布”模块,在其中包含所需的依赖关系。然而,这意味着arquillian测试正在引用之前的版本的战争 - 这也不是理想的。
另一种选择是使用Shrinkwrap创建一个包含测试的JVM并运行JVM以运行“测试”JAR-我之前完成了这个任务,当时我需要用多个ORM测试我的代码(否则,例如,OpenJPA在你的路径中与在你的路径中有Hibernate冲突)。但是,这会将您的测试与测试框架(JUnit,TestNG等)断开连接,并使测试难以调试。
您可以在下面的依赖项部分指定范围。它可以被称为测试,编译或运行时。
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>org.springframework.integration.adapter</artifactId>
<version>1.0.3.RELEASE</version>
<scope>runtime</scope>
</dependency>
希望这会有所帮助。 谢谢,KJ
正如我上面提到的那样,* runtime * scope意味着依赖关系也可以在* test *作用域中使用,这正是我不想要的。 – Marco 2013-04-04 13:03:00
war
不是一个依赖范围。有效范围为provided
,compile
,runtime
,test
,system
。您只能选择其中的一个,它们是唯一的选项,它们都不会从test
范围中排除。
请参阅主要选项[此处](http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope)。似乎没有人做你想做的事。 – OldCurmudgeon 2013-04-04 13:02:30
没有选择去做你想做的事情,无论如何不要在'test'范围内想要某些东西。也许如果你发布了你实际想要达到的目标,也许有人可能会提供一个解决方案。 – 2013-04-04 13:05:35
@JarrodRoberson谢谢!你可以提交它作为答案,所以我可以将其标记为这样吗?至于是否有意义,请告诉我如何在没有相关性影响其他测试的情况下为arquillian测试创建一场战争? – Marco 2013-04-04 13:07:14