2

我是 maven 新手,这里有两个问题:

1、如何解决遗漏神器问题?

我需要 jcharts-0.7.5,但它在 Maven 中央存储库中不可用。我有 jar 文件,但似乎不容易将其放入 maven 项目中。

2、如何修复artifact的依赖范围错误?

我有一个WAR项目依赖于工件axis2-kernel,它依赖于'compile'范围的servlet-api-2.3('provided'的错误),所以mvn install将servlet-api-2.3.jar打包到war文件中,并导致“validateJarFile(...) - jar 未加载”。Tomcat 7 中的错误。

4

3 回答 3

2

第一个:使用 Maven 存储库。这可以是具有静态内容的简单 Apache HTTP 站点。但我建议使用 Sonatype Nexus 或 JFrog Artifactory 来存储在其他地方找不到的工件。您可以在 JBoss 存储库或 IBiblio 中找到它们(两者都很大)

第二:您可以将该依赖项添加到您的 pom 并设置您想要的范围。如果您排除工件,无论如何您都必须再次添加它。Maven 总是喜欢直接在你的 pom 中的内容:

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <scope>provided</scope>
</dependency>
于 2012-02-14T09:56:31.193 回答
1

要回答您的第二个问题:您可以使用 < exclude > 标签排除传递依赖: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>
于 2012-02-14T09:27:05.460 回答
0
  1. 有许多不同的解决方案如何添加缺少的依赖项。例如,您可以使用范围system并提供路径(您可以将 JAR 放入项目并使用相对于 的路径${basedir})。

    但是更好的解决方案是安装像NexusArtifactory这样的服务器,因为它们允许您创建自己的存储库,并且在 Internet 出现故障时它们仍然可以工作(例如,当某些白痴破坏您的路由器或您的 ISP 出现问题或有人驱动时)一根 18 英寸的双 T 钢梁穿过一束纤维)。

    构建也将更快,因为下载将通过您的本地 LAN 而不是绕半个地球进行。

  2. 您可以简单地在 POM 中以不同的范围重复依赖项(您的 POM 总是获胜),或者您可以使用dependencyManagementelement

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

于 2012-02-14T13:22:43.080 回答