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

Ali*_*iba 11 maven

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

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

我似乎没有<scope>或者<optional>可以解决这个问题,但<profiles>如果有任何方法可以根据依赖项可用性激活/停用配置文件,则可能会这样做.

Pet*_*lka 6

简答:不.

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

如果maven允许所请求的行为,则构建的可重现性将受到很大影响.

如果默默无闻和不可再现性不是您的问题,这里有一个提示如何做到这一点:

  • 使用exec-maven-plugin或maven-antrun-plugin从pom.xml调用外部ant
  • 在ant代码中,使用工件:来自Maven Ant Tasks的依赖项
  • 将它包装在ant-contrib的trycatch块中

无论如何,我强烈反对将这些事情纳入maven构建中.将它作为单独的功能,通过命令行中的ant调用,可能通常就足够了.


p1b*_*nne 1

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

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

您还可以从 pom.xml 中完全删除依赖项,并将依赖项移至驻留在 .m2/settings.xml 中的配置文件(用户级别配置文件)

请参阅配置文件部分的介绍

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

根据文件中存在的情况激活上述配置文件.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>
Run Code Online (Sandbox Code Playgroud)