Java maven编织工件的范围
我有一个项目Java maven编织工件的范围,java,maven,dependencies,aspectj,Java,Maven,Dependencies,Aspectj,我有一个项目foo-instrumented,它依赖于foo 该项目实际上使用附加代码插入foo,并替换它。也就是说,foo是foo instrumented的编译时依赖项,但它绝对不是运行时依赖项(foo instrumented替换foo),它不应该传播到子级(也就是说,依赖于foo instrumented的项目不应该最终依赖于foo) 对于这种依赖关系,是否有适当的maven范围,或者其他解决方案 Edit:我的请求不够清楚:虽然foo不应该在子项目依赖项中结束,但是foo的依赖项应该结
foo-instrumented
,它依赖于foo
该项目实际上使用附加代码插入foo
,并替换它。也就是说,foo
是foo instrumented
的编译时依赖项,但它绝对不是运行时依赖项(foo instrumented
替换foo
),它不应该传播到子级(也就是说,依赖于foo instrumented
的项目不应该最终依赖于foo
)
对于这种依赖关系,是否有适当的maven范围,或者其他解决方案
Edit:我的请求不够清楚:虽然foo
不应该在子项目依赖项中结束,但是foo
的依赖项应该结束(例如,如果foo
依赖于log4j
,那么依赖于foo的项目应该将log4j
作为其依赖项的一部分),这似乎排除了提供的范围
谢谢
编辑:好吧,我需要在这里说一句话:有没有真正的人真正理解MAVEN文档?我看了一些,猜猜是什么:没有解释,没有插图,只有大量的XML呕吐。XML呕吐不是文档,各位!你不能排除依赖,但仍然包含它的依赖。
但是,您可以为未插入指令的依赖项定义排除项,并将依赖项添加到其他模块中(再次)。当您将依赖项定义为foo插入指令的
时,请执行以下操作:
<dependencies>
<dependency>
<groupId>bar</groupId>
<artifactId>foo-instrumented</artifactId>
<exclusions>
<exclusion>
<groupId>bar</groupId>
<!-- Exclude the non-instrumented dependency: -->
<artifactId>foo</artifactId>
</exclusion>
</exclusions>
<dependency>
<!-- Add the dependencies you need for foo to work here -->
<dependencies>
酒吧
foo仪器化
酒吧
福
您应该使用范围。在您的foo工具化项目中:
<dependencies>
<dependency>
<groupId>bar</groupId>
<artifactId>foo</artifactId>
<type>pom</type>
<scope>import</scope>
<dependency>
<dependencies>
酒吧
福
聚甲醛
进口
这将把foo的依赖项拉到foo工具中,而不包括foo。这是我目前正在做的事情,但它不是很优雅。恐怕没有更好的方法。这是目前最有希望的答案,但我没有成功地让它工作(我仍然需要在编译/编织时拉依赖项)@Rom1-您还需要将foo作为编译时依赖项(scope->compile;no-type元素)进行拉取。如果这仍然不起作用,您可以发布pom.xml for foo instrumented吗?我有点不愿意发布我的pom文件,但在声明导入依赖项之后,我得到了一个警告:[警告]生成配置错误:跳过缺少、空或损坏的inpath条目:/home/me/.m2/repository/bar/foo/0.1.0-SNAPSHOT/foo-0.1.0-SNAPSHOT。pom@Rom1-听起来您的本地repo中的pom文件有问题。当您删除它并在foo项目中执行mvn安装时会发生什么情况?