在我的 class 路径中找不到 MavenDependencyResolver。
Can not find MavenDependencyResolver in my class path.
我正在使用这个 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());
}
但是我在类路径中找不到DependencyResolvers
和MavenDependencyResolver
类,这个类应该在shrinkwrap-resolver-bom
中。我做错了什么?
当您在 <dependencyManagement>
标记中提及依赖项时,它仅表示这些依赖项可以使用。为了让你使用它们,你应该明确地将它包含在 <dependencyManagement>
标签之外(就像你对 boss-as-arquillian-container-managed
和 jboss-javaee6-webapp-archetype
所做的那样)。
因此,在您的情况下,要么删除 <dependencyManagement>
标签,要么再次在 <dependencyManagement>
标签之外包含 shrinkwrap-resolver-bom
。
此外,当您处理多模块 Maven 项目(其中有 1 个父模块和多个子模块)以及想要控制依赖项及其依赖项时,使用 <dependencyManagement>
标记更有意义来自父 pom 的版本。
在您的情况下,如果您只使用 1 个模块,那么我建议删除 <dependencyManagement>
标签并将所有依赖项包含在 <dependencies>
标签中。这应该足够了。
我正在使用这个 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());
}
但是我在类路径中找不到DependencyResolvers
和MavenDependencyResolver
类,这个类应该在shrinkwrap-resolver-bom
中。我做错了什么?
当您在 <dependencyManagement>
标记中提及依赖项时,它仅表示这些依赖项可以使用。为了让你使用它们,你应该明确地将它包含在 <dependencyManagement>
标签之外(就像你对 boss-as-arquillian-container-managed
和 jboss-javaee6-webapp-archetype
所做的那样)。
因此,在您的情况下,要么删除 <dependencyManagement>
标签,要么再次在 <dependencyManagement>
标签之外包含 shrinkwrap-resolver-bom
。
此外,当您处理多模块 Maven 项目(其中有 1 个父模块和多个子模块)以及想要控制依赖项及其依赖项时,使用 <dependencyManagement>
标记更有意义来自父 pom 的版本。
在您的情况下,如果您只使用 1 个模块,那么我建议删除 <dependencyManagement>
标签并将所有依赖项包含在 <dependencies>
标签中。这应该足够了。