与Maven的传递第三方依赖

时间:2011-03-29 09:48:00

标签: java maven

我正在开发使用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>

1 个答案:

答案 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>