我正在开发使用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>
Run Code Online (Sandbox Code Playgroud)
在Web项目中,我添加了对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>
Run Code Online (Sandbox Code Playgroud)
卡桑德拉访问pom:
<dependency>
<groupId>me.prettyprint</groupId>
<artifactId>hector</artifactId>
<version>0.7.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
它可能不是最佳解决方案,但它对我有用:将 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>
Run Code Online (Sandbox Code Playgroud)
然后添加以下插件:
<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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
802 次 |
| 最近记录: |