In-project Maven Repository导致依赖性错误

问题描述:

这个Maven错误让我完全陷入困境,所以我可以使用一些帮助。 我有一个声明了一个在项目回购这样一个项目:In-project Maven Repository导致依赖性错误

<parent> 
    <groupId>ca.gc.agr.common</groupId> 
    <artifactId>drydock-parent</artifactId> 
    <relativePath>../DryDockPOM/pom.xml</relativePath> 
</parent> 
<artifactId>CognosReportService</artifactId> 
<packaging>jar</packaging> 
<version>2.0</version> 

<name>CognosReportService</name> 

<!-- In Project repository --> 
<repositories> 
    <repository> 
     <id>in-project</id> 
     <name>In Project Repo</name> 
     <url>file://${project.basedir}/libs</url> 
    </repository> 
</repositories> 

<dependencies> 
    ... stuff ... 

    <dependency> 
     <groupId>cognos-sdk</groupId> 
     <artifactId>cognos-client</artifactId> 
     <version>8.4.1</version> 
    </dependency> 

    <dependency> 
     <groupId>cognos-sdk</groupId> 
     <artifactId>cognos-axis</artifactId> 
     <version>8.4.1</version> 
    </dependency> 

    ... stuff ... 

</dependencies> 

存在使用这一个像这样的另一个项目:

<parent> 
    <groupId>ca.gc.agr.common</groupId> 
    <artifactId>common-web-parent</artifactId> 
    <relativePath>../DryDockWebPOM/pom.xml</relativePath> 
</parent> 
<artifactId>CognosReportWeb</artifactId> 
<packaging>jar</packaging> 
<version>2.0</version> 

<name>CognosReportWeb</name> 

<dependencies> 

    ... stuff .... 

    <dependency> 
     <groupId>ca.gc.agr.common</groupId> 
     <artifactId>CognosReportService</artifactId>  
     <version>[1.0,)</version> 
    </dependency> 

    ... stuff .... 

</dependencies> 

如果我去到父项目,做从那里一个mvn install,一切正常。不过,如果我尝试自己建立CognosReportWeb,我得到这个:

[ERROR] Failed to execute goal on project CognosReportWeb: Could not resolve dependencies for project ca.gc.agr.common:CognosReportWeb:jar:2.0: 
Failed to collect dependencies for [ca.gc.agr.common:CognosReportService:jar:[1.0,) (compile), 
ca.gc.agr.common:CommonWebJar:jar:[1.0,) (compile), 
org.apache.tomcat:tomcat-servlet-api:jar:7.0.16 (provided), 
javax.servlet.jsp:jsp-api:jar:2.2 (provided), 
javax.el:el-api:jar:2.2 (provided), 
org.glassfish.web:el-impl:jar:2.2 (provided), 
com.sun.faces:jsf-api:jar:2.1.7 (compile), 
com.sun.faces:jsf-impl:jar:2.1.7 (compile), 
org.apache.myfaces.tomahawk:tomahawk20:jar:1.1.10 (compile), 
org.richfaces:richfaces-bom:pom:4.2.0.Final (compile), 
org.richfaces.ui:richfaces-components-ui:jar:4.2.0.Final (compile), 
org.richfaces.core:richfaces-core-impl:jar:4.2.0.Final (compile), 
org.primefaces:primefaces:jar:5.0 (compile), 
org.springframework:spring-web:jar:4.0.0.RELEASE (compile), 
com.cybozu.labs:langdetect:jar:1.1-20120112 (compile), 
org.apache.myfaces.test:myfaces-test20:jar:1.0.7 (test), 
org.aspectj:aspectjweaver:jar:1.7.4 (compile), 
org.springframework:spring-context:jar:4.0.0.RELEASE (compile), 
org.springframework:spring-aspects:jar:4.0.0.RELEASE (compile), 
org.springframework:spring-tx:jar:4.0.0.RELEASE (compile), 
org.springframework:spring-test:jar:4.0.0.RELEASE (compile), 
org.springframework:spring-orm:jar:4.0.0.RELEASE (compile), 
org.springframework:spring-oxm:jar:4.0.0.RELEASE (compile), 
org.springframework:spring-jdbc:jar:4.0.0.RELEASE (compile), 
org.hibernate:hibernate-core:jar:4.1.7.Final (compile), 
commons-io:commons-io:jar:1.3.2 (compile), 
commons-lang:commons-lang:jar:2.4 (compile), 
commons-beanutils:commons-beanutils:jar:1.8.3 (compile), 
commons-validator:commons-validator:jar:1.3.1 (compile), 
log4j:log4j:jar:1.2.17 (compile), 
org.slf4j:slf4j-log4j12:jar:1.7.6 (compile), 
junit:junit:jar:4.11 (compile), 
junit-addons:junit-addons:jar:1.4 (compile), 
com.googlecode.log4jdbc:log4jdbc:jar:1.2 (compile), 
org.reflections:reflections:jar:0.9.9-RC1 (compile), 
oro:oro:jar:2.0.8 (compile), 
dbunit:dbunit:jar:2.1 (compile), 
com.h2database:h2:jar:1.3.175 (compile)]: 

Failed to read artifact descriptor for org.aspectj:aspectjweaver:jar:1.8.0.M1: 
    Could not transfer artifact org.aspectj:aspectjweaver:pom:1.8.0.M1 from/to in-project (file://${project.basedir}/libs): 
     Repository path /libs does not exist, and cannot be created. -> [Help 1] 

乍一看,好像有与org.aspectj:aspectjweaver:pom:1.8.0.M1一个问题,但我如果我注释掉我自己的项目回购在CognosReportService(并重新安装)时,突然CognosReportWeb开始工作。

我真的难住了。难道我做错了什么?

任何想法,将不胜感激!

Re “如果我在CognosReportService中注释掉自己的项目内回购(并重新安装),突然CognosReportWeb开始工作。”

然后使用您当地的Maven回购(默认~/.m2/repository或根据您的settings.xmls),这是已知的可靠工作。所以,它不是突然工作,它的设计工作。 ;-)

最后的消息给出了一个关键的提示。是org.aspectj:aspectjweaver:pom:1.8.0.M1file://${project.basedir}/libs

使用这个额外的存储库的原因是什么?

+0

使用额外的回购的原因是,我可以使用一些第三方的罐子作为maven的依赖。我想不出另一种方式来确保人们可以在签出源代码后运行Maven构建,而无需手动将这些jar插入到本地repo中。 – 2014-10-18 05:28:36

+0

@ValBlant [为什么提交Java jar文件到存储库是个坏主意](http://stackoverflow.com/questions/4649015/java-jar-files-into-a-repository-cvs-svn)。 – 2014-10-18 12:19:12

如果依赖是不是Maven的中央提供,并且要确保任何人谁检查你的代码就可以建立自己的源没有做额外的配置或JAR安装,然后找到任何替代的公共储存库,依赖托管。

,并把它添加到您的项目,就像你如何做(除了使用本地文件基于回购)。

<repositories> 
    <repository> 
     <id>opencastproject</id> 
     <url>http://repository.opencastproject.org/nexus/content/repositories/public/</url> 
    </repository> 
</repositories> 

但在你的情况下,org.aspectj:aspectjweaver LIB的类似或更新版本可在Maven中环 - http://central.maven.org/maven2/org/aspectj/aspectjweaver/,所以也许你可以只使用

<dependency> 
    <groupId>org.aspectj</groupId> 
    <artifactId>aspectjweaver</artifactId> 
    <version>1.8.2</version> 
</dependency> 

呢?

+0

我不认为这个问题与aspectjweaver有什么关系。有问题的版本是由Hibernate或Spring中的其他pom请求的,所以我总是看到该警告,但构建成功。我试图将这些罐子放入到项目内回购仓库中,这些罐子在任何公共回购仓库中都没有,因为它们是一个非常模糊的专有系统。我已经在我们的组织中安装Nexus并将专有的jar放置在那里,解决了这个问题,现在构建工作。我在项目回购中遇到的错误似乎仍然是一个错误。 – 2014-10-27 01:24:20