使用maven的正确方法

时间:2012-02-14 09:20:07

标签: maven scope dependencies artifact

我是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中的错误。

3 个答案:

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

  1. 有许多不同的解决方案如何添加缺少的依赖项。例如,您可以使用范围system并提供路径(您可以将JAR放入项目并使用相对于${basedir}的路径)。

    但更好的解决方案是安装像NexusArtifactory这样的服务器,因为它们允许您创建自己的存储库,如果互联网出现故障,它们仍可正常工作(例如,当某些白痴休息时您的路由器或您的ISP有一些问题或有人通过一堆纤维驱动18英寸双T钢梁。)

    构建也会快得多,因为下载将通过本地局域网而不是遍布全球一半。

  2. 您只需在不同范围内重复POM中的依赖关系(您的POM总是获胜),或者您可以use a dependencyManagement element

    我更喜欢dependencyManagement方法,因为它允许您在所有项目的单个位置设置范围和版本。