我有一个依赖项,我已在Maven本地存储库中安装并在本地使用,但在部署服务器上不可用。我使用Class.forName(...)
使用该依赖项,因此如果在部署服务器上的类路径中遗漏了它,则没有问题。
如果没有解决依赖关系,有没有办法告诉Maven忽略依赖?
我似乎<scope>
或<optional>
无法解决此问题,但如果有任何方法可以激活/停用个人资料,则可以使用<profiles>
执行此操作基于依赖性可用性。
答案 0 :(得分:5)
简答:不。
长答案:一旦声明了依赖关系 - 无论是在公共部分还是在活动的配置文件中 - 当Maven尝试它时它必须是可解析的;否则构建失败。
如果maven允许所请求的行为,那么构建的可重现性会受到很大影响。
如果对你来说不明确和不可再现性不是问题,这里有一个提示:如何做到这一点:
无论如何,我强烈反对将这些内容包含在maven构建中。将它作为单独的功能,通过命令行中的ant调用,可能通常就足够了。
答案 1 :(得分:0)
假设缺少的依赖关系仅在本地环境中很重要,您可以通过.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>
答案 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>