2013-04-04 61 views
1

我想在我的战争中包含(maven)依赖关系,同时确保它们在运行时或测试范围内为而不是我如何仅在我的战争中包含依赖关系?

的问题如下:

  1. 有一些罐子(假设罐子A,B和C),我需要在我的战争。这是因为使用了CDI。

  2. 我有一些使用项目产生的战争的集成测试。这些集成测试是基于arquillian的测试。

  3. 但是,我有其他的测试是而不是集成测试,将受到在类路径中包括罐子A,B和C的不利影响。

+3

请参阅主要选项[此处](http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope)。似乎没有人做你想做的事。 – OldCurmudgeon 2013-04-04 13:02:30

+0

没有选择去做你想做的事情,无论如何不要在'test'范围内想要某些东西。也许如果你发布了你实际想要达到的目标,也许有人可能会提供一个解决方案。 – 2013-04-04 13:05:35

+0

@JarrodRoberson谢谢!你可以提交它作为答案,所以我可以将其标记为这样吗?至于是否有意义,请告诉我如何在没有相关性影响其他测试的情况下为arquillian测试创建一场战争? – Marco 2013-04-04 13:07:14

回答

0

不错的选择

啊哈!通过使用surefire插件,可以从测试阶段中排除某些依赖项。这在StackOverflow answer中有描述。

这样我就可以创建我的战争并且不在测试范围内拥有依赖关系(感谢Peter Mularien)!

坏选项

它看起来像Maven的组装插件需要你有任何include依赖于依赖范围也可提供。由于test是最小的作用域,因此不可能在战争中包含依赖项,而不能在项目的测试范围内使用它。

maven war插件不允许包含(或排除)依赖项。

另一种选择是创建第二个“分布”模块,在其中包含所需的依赖关系。然而,这意味着arquillian测试正在引用之前的版本的战争 - 这也不是理想的。

另一种选择是使用Shrinkwrap创建一个包含测试的JVM并运行JVM以运行“测试”JAR-我之前完成了这个任务,当时我需要用多个ORM测试我的代码(否则,例如,OpenJPA在你的路径中与在你的路径中有Hibernate冲突)。但是,这会将您的测试与测试框架(JUnit,TestNG等)断开连接,并使测试难以调试。

0

您有几种选择属性:运行时,测试,编译等

例如:

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>jcl-over-slf4j</artifactId> 
    <version>${org.slf4j.version}</version> 
    <scope>runtime</scope> 
</dependency> 

更多,你可以阅读here

+0

不幸的是,* runtime * scope意味着依赖项也可以在* test *作用域中使用。请重新阅读这个问题! – Marco 2013-04-04 13:02:00

0

您可以在下面的依赖项部分指定范围。它可以被称为测试,编译或运行时。

<dependency> 
     <groupId>org.springframework.integration</groupId> 
     <artifactId>org.springframework.integration.adapter</artifactId> 
     <version>1.0.3.RELEASE</version> 
     <scope>runtime</scope>    
    </dependency> 

希望这会有所帮助。 谢谢,KJ

+0

正如我上面提到的那样,* runtime * scope意味着依赖关系也可以在* test *作用域中使用,这正是我不想要的。 – Marco 2013-04-04 13:03:00

4

war不是一个依赖范围。有效范围为provided,compile,runtime,test,system。您只能选择其中的一个,它们是唯一的选项,它们都不会从test范围中排除。

相关问题