我正在使用此tutorial来为我的项目编写集成测试。我将这样的依赖项添加到我的项目中:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.shrinkwrap.resolver</groupId>
<artifactId>shrinkwrap-resolver-bom</artifactId>
<version>3.0.0-alpha-1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian</groupId>
<artifactId>arquillian-bom</artifactId>
<version>1.1.11.Final</version>
<scope>import</scope>
<type>pom</type>
<exclusions>
<exclusion> <!-- declare the exclusion here -->
<groupId>org.jboss.shrinkwrap.resolver</groupId>
<artifactId>shrinkwrap-resolver-bom</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.as</groupId>
<artifactId>jboss-as-arquillian-container-managed</artifactId>
<version>7.1.1.Final</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.spec.archetypes</groupId>
<artifactId>jboss-javaee6-webapp-archetype</artifactId>
<version>7.1.3.Final</version>
</dependency>
我在部署方法中尝试以下代码:
@Deployment
public static Archive createDeployment() {
return ShrinkWrap.create(WebArchive.class, "fileviewer.war")
.addAsLibraries(
DependencyResolvers.use(MavenDependencyResolver.class)
.artifact("commons-io:commons-io:2.1")
.artifact("org.json:json:20090211")
.resolveAsFiles());
}
但是我在我的classepath中找不到
DependencyResolvers
和MavenDependencyResolver
类,这些类应该位于shrinkwrap-resolver-bom
中。我究竟做错了什么? 最佳答案
当您在<dependencyManagement>
标记中提到依赖项时,仅表示这些依赖项可供使用。为了使您可以使用它们,应该在<dependencyManagement>
标记之外显式包括它们(就像您对boss-as-arquillian-container-managed
和jboss-javaee6-webapp-archetype
所做的一样)。
因此,在您的情况下,请删除<dependencyManagement>
标记,或者再次在shrinkwrap-resolver-bom
标记之外添加<dependencyManagement>
。
另外,在处理多模块maven项目(其中有1个父模块和几个子模块)时,以及要从父pom中控制依赖项及其版本时,使用<dependencyManagement>
标记更有意义。
在您的情况下,如果仅使用1个模块,则建议删除<dependencyManagement>
标记,并将所有依赖项仅包含在<dependencies>
标记内。这样就足够了。