我是maven的新手,我在这里遇到了两个问题:
1,如何解决缺失的人为问题?
我需要jcharts-0.7.5,但它在Maven Central Repository中不可用。我有jar文件,但似乎不容易把它放到maven项目中。
2,如何修复工件的错误依赖范围?
我有一个WAR项目依赖于工件axis2-kernel,这取决于servlet-api-2.3,其范围为'compile'('provided'的错误),所以mvn install
包为servlet-api -2.3.jar进入war文件,并导致“validateJarFile(...) - jar未加载”。 Tomcat 7中的错误。
答案 0 :(得分:2)
第一:使用maven存储库。这可以是具有静态内容的简单Apache HTTP站点。但我建议使用Sonatype Nexus或JFrog Artifactory来存储其他地方找不到的工件。 您可以在JBoss存储库或IBiblio中找到它们(两者都很大)
第二:您可以将该依赖项添加到您的pom中,只需设置所需的范围即可。如果您排除了工件,则无论如何都必须重新添加它。 Maven总是喜欢你直接在你身边的东西:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<scope>provided</scope>
</dependency>
答案 1 :(得分:1)
要回答您的第二个问题:您可以使用&lt;来排除传递依赖关系。排除&gt;标记:http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html
<project>
...
<dependencies>
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-kernel</artifactId>
<version>...</version>
<exclusions>
<exclusion><!-- declare the exclusion here -->
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
答案 2 :(得分:0)
有许多不同的解决方案如何添加缺少的依赖项。例如,您可以使用范围system
并提供路径(您可以将JAR放入项目并使用相对于${basedir}
的路径)。
但更好的解决方案是安装像Nexus或Artifactory这样的服务器,因为它们允许您创建自己的存储库,如果互联网出现故障,它们仍可正常工作(例如,当某些白痴休息时您的路由器或您的ISP有一些问题或有人通过一堆纤维驱动18英寸双T钢梁。)
构建也会快得多,因为下载将通过本地局域网而不是遍布全球一半。
您只需在不同范围内重复POM中的依赖关系(您的POM总是获胜),或者您可以use a dependencyManagement
element。
我更喜欢dependencyManagement
方法,因为它允许您在所有项目的单个位置设置范围和版本。