【发布时间】:2011-03-29 09:47:59
【问题描述】:
我正在开发使用 Cassandra NoSQL 数据库的应用程序,并且正在添加 Web 界面。我有 2 个项目:cassandra-access(这个项目是 DAL)和 web(这个项目是 web 应用程序)。
场景很简单。 Cassandra-access 依赖于不在 maven 存储库中的 hector.jar。所以我通过 mvn install:install-file 将此依赖项添加到我的本地存储库中,并在父 pom 中列出我的存储库:
<repositories>
<repository>
<id>loc</id>
<url>file://${basedir}/../mvn-local-repository</url>
</repository>
</repositories>
在 Web 项目 pom 中,我添加了对 Cassandra-access 的依赖。但是,当我使用从数据库读取的 hello world 启动 Web 应用程序时,我得到了 classNotFound 异常,就好像 hector.jar 不在类路径上一样。当我编写 mvn clean install 时,web 项目的战争不包括 WEB-INF/lib 中的 hector.jar。这进一步证实了我的理论。
如何实现战争获得所有传递依赖?我认为编译范围内的所有依赖项(默认)都会被复制。
网络项目 pom:
<dependency>
<groupId>net.product</groupId>
<artifactId>cassandra-access</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
Cassandra 访问 pom:
<dependency>
<groupId>me.prettyprint</groupId>
<artifactId>hector</artifactId>
<version>0.7.0</version>
</dependency>
【问题讨论】:
-
我发现上面的文字也可以。我刚刚在 POM 中有警告,这导致 maven 根本不包括传递依赖。调试这种情况的最好方法是使用 mvn dependency:tree -X