我正在开发使用Cassandra NoSQL数据库的应用程序,我正在添加Web界面。我有2个项目:cassandra-access(这个项目是DAL)和web(这个项目是web应用程序)。
情景很简单。 Cassandra-access依赖于hector.jar,它不在maven资源库中。所以我通过mvn install:install-file将这个依赖项添加到我的本地存储库,并在父pom中列出我的存储库:
<repositories>
<repository>
<id>loc</id>
<url>file://${basedir}/../mvn-local-repository</url>
</repository>
</repositories>
在Web项目中,我添加了对Cassandra-access的依赖。但是,当我从hello world启动Web应用程序从数据库读取时,我得到classNotFound异常,好像hector.jar不在类路径上。当我编写mvn clean install时,生成的web项目的战争不包括WEB-INF / lib中的hector.jar。这进一步证实了我的理论。
如何实现那场战争获得所有传递的依赖?我认为范围编译中的所有依赖项(默认)都将被复制。
网络项目:
<dependency>
<groupId>net.product</groupId>
<artifactId>cassandra-access</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
Cassandra-access pom:
<dependency>
<groupId>me.prettyprint</groupId>
<artifactId>hector</artifactId>
<version>0.7.0</version>
</dependency>
答案 0 :(得分:1)
它可能不是最佳解决方案,但它对我有用: 把hector jar放在cassandra访问的lib目录中。 添加到cassandra-access pom:
<dependency>
<groupId>%HECTOR_JAR_GROUP_ID%</groupId>
<artifactId>%HECTOR_JAR_ARTIFACT_ID%</artifactId>
<version>%HECTOR_JAR_VERSION%</version>
<scope>system</scope>
<systemPath>${basedir}/lib/%HECTOR_JAR_NAME%</systemPath>
</dependency>
然后添加以下插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>