【问题标题】:Transitive third party dependencies with Maven使用 Maven 传递第三方依赖项
【发布时间】: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

标签: java maven


【解决方案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>

【讨论】:

    猜你喜欢
    • 2013-02-17
    • 2018-12-09
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 2020-03-01
    相关资源
    最近更新 更多