【发布时间】:2016-12-15 03:37:21
【问题描述】:
我有一个主项目和一个公共项目,它们的依赖项不在任何存储库中,需要包含using <scope>system</scope>。
因为系统依赖是使用相对 url 使用 maven 属性 ${project.basedir} 定义的,所以我 made it <optional>true</optional> 这样它就不会打扰其他项目,因此依赖项目需要用正确的路径重新定义这个依赖。
Common pom.xml:
<dependency>
<groupId>thirdparty-group</groupId>
<artifactId>artifact</artifactId>
<version>1.4.2</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/dependency.jar</systemPath>
<optional>true</optional>
</dependency>
在主项目的 pom 中:
<dependency>
<groupId>my-group</groupId>
<artifactId>commons</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>thirdparty-group</groupId>
<artifactId>artifact</artifactId>
<version>1.4.2</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/dependency.jar</systemPath>
</dependency>
显然dependency.jar 在commons 和main 项目中。
commons jar 可以顺利安装。但是,当在主项目中使用时,结果是:
[警告] my-group:commons:jar:1.0-SNAPSHOT 的 POM 无效,传递依赖项(如果有)将不可用:为 my-group:commons 构建有效模型时遇到 1 个问题: 1.0-快照
[ERROR] 'dependencies.dependency.systemPath' for thirdparty-group:artifact:jar 必须指定绝对路径,但为 ${project.basedir}/lib/dependency.jar @
构建继续,但传递运行时依赖项现在不包括破坏应用程序。
为什么 maven 抱怨公共依赖项甚至与主项目无关(因为它是 optional,为什么它甚至包含为传递依赖项)? 如何解决这个问题?
不幸的是,将系统依赖项放入 repo 不是一种选择。
【问题讨论】:
-
此类问题的最简单解决方案是简单地安装存储库管理器并在那里安装此类工件。你很好......不需要定义系统范围的依赖关系......