如果无法解决它,如何告诉Maven忽略依赖?

时间:2011-02-26 09:56:44

标签: maven

我有一个依赖项,我已在Maven本地存储库中安装并在本地使用,但在部署服务器上不可用。我使用Class.forName(...)使用该依赖项,因此如果在部署服务器上的类路径中遗漏了它,则没有问题。

如果没有解决依赖关系,有没有办法告诉Maven忽略依赖?

我似乎<scope><optional>无法解决此问题,但如果有任何方法可以激活/停用个人资料,则可以使用<profiles>执行此操作基于依赖性可用性。

4 个答案:

答案 0 :(得分:5)

简答:不。

长答案:一旦声明了依赖关系 - 无论是在公共部分还是在活动的配置文件中 - 当Maven尝试它时它必须是可解析的;否则构建失败。

如果maven允许所请求的行为,那么构建的可重现性会受到很大影响。

如果对你来说不明确和不可再现性不是问题,这里有一个提示:如何做到这一点:

  • 使用exec-maven-plugin或maven-antrun-plugin从pom.xml调用外部ant
  • 在蚂蚁代码中
  • ,使用Maven Ant Tasks中的artifact:dependencies
  • 将其包装在ant-contrib的trycatch

无论如何,我强烈反对将这些内容包含在maven构建中。将它作为单独的功能,通过命令行中的ant调用,可能通常就足够了。

答案 1 :(得分:0)

假设缺少的依赖关系仅在本地环境中很重要,您可以通过.m2 / settings.xml使用配置文件和激活的组合

从一般依赖项中删除依赖项,并将其作为引用的依赖项移动到pom.xml的配置文件(项目级别配置文件)中,并通过m2 / settings.xml激活配置文件。

您也可以从pom.xml中完全删除依赖项,并将依赖项移动到位于.m2 / settings.xml(用户级别配置文件)中的配置文件

请参阅introduction to profiles部分

另一种适合您需求的方式可能更好

根据.m2/repository/local/dependency/1.0.0-Snapshot/local.jar

中文件的存在激活上述配置文件
<profiles>
  <profile>
    <activation>
      <file>
        <exists>/home/user/.m2/repository/local/dependency/1.0.0-Snapshot/local.jar</exists>
      </file>
    </activation>
    ...
  </profile>
</profiles>

答案 2 :(得分:0)

很奇怪,我在Maven中遇到了一个问题,它说“无法解决依赖关系”(某种不再存在的怪异的传递性依赖关系),但是只有在我的~/.m2/settings.xml遇到该错误消息时它才会失败

从本地存储库中获取我的jars

  <profiles>
    <profile>
      <id>nexus</id>
      <repositories>
        <repository>
          <id>a name</id>
          <url>http://somewhere/local/a</url>
        </repository>

如果将其更改为镜像,它不会失败。

  <mirrors>
    <mirror>
      <id>a name</id>
      <name>an awesome description</name>
      <url>http://some/where/local</url>
      <mirrorOf>external:*</mirrorOf>

(相同的回购)。走吧。

答案 3 :(得分:-1)

请尝试从POM中排除依赖项

<executions>
<execution>
<id>***failed dependency Id***</id>
</execution>
</executions>