Maven-依赖于组装的拉链
我正试图让一个项目B下拉(并解包)一个由项目a构建的ZIP,并部署到远程存储库 使用Maven-依赖于组装的拉链,maven,zip,pom.xml,maven-assembly-plugin,maven-dependency-plugin,Maven,Zip,Pom.xml,Maven Assembly Plugin,Maven Dependency Plugin,我正试图让一个项目B下拉(并解包)一个由项目a构建的ZIP,并部署到远程存储库 使用maven组装插件创建并连接拉链,包装类型为pom: project-a 拉链 项目B使用 聚甲醛 ... org.apache.maven.plugins maven汇编插件 分发包 包裹 单一的 src/main/assembly/scripts.xml gnu 试图使用maven依赖插件将其从项目B的pom中下拉: org.apache.maven.plugins maven依赖插件 复制脚本 包裹 复
maven组装插件
创建并连接拉链,包装类型为pom
:
project-a
拉链
项目B使用
聚甲醛
...
org.apache.maven.plugins
maven汇编插件
分发包
包裹
单一的
src/main/assembly/scripts.xml
gnu
试图使用maven依赖插件将其从项目B的pom中下拉:
org.apache.maven.plugins
maven依赖插件
复制脚本
包裹
复制
${basedir}/target/staging
真的
...
...
...
真的
拉链
失败原因:[ERROR]未能在项目上执行目标…:无法解析项目组的依赖项:工件:pom:version:无法在nexus中找到工件组:project-a:zip:version(http://...:8081/nexus/content/groups/public)->[帮助1]
我假设这是因为我将项目A的包装指定为pom
,而不是zip
,但是我不能将项目A指定为包装类型zip
,因为它会导致:
[ERROR]未知包装:第13行第13列的zip
我是做错了还是根本不可能?
我只是有一堆文件,我想把它们打包成一个工件,并允许多个其他项目下载和解压它们以供使用。接受不同的建议
我还检查了确保组装好的拉链确实在nexus中
更新了答案
为了其他人的利益,我缺少的是依赖项的
必须与程序集的
匹配。请注意,在以下文件中指定了此ISTHEATTACEDARIFATSCLASSIFIER
的位置
scripts.xml(项目A):
这是DARTIFACTSCLISIER
拉链
src/main/resources
...
pom.xml(项目B):
org.apache.maven.plugins
maven依赖插件
复制脚本
包裹
复制
${basedir}/target/staging
真的
...
...
...
这是DARTIFACTSCLISIER
真的
拉链
欢迎使用堆栈溢出:)
你走对了路。你真正的问题是使用拉链
下面的配置很好,对我来说非常有用。这是一个老版本(2年前),我不确定是否符合最佳实践。但我知道这很有效
这允许我在项目之间共享一些资源,特别是对于单元测试
Zip项目:
pom.xml
com.mycompany
cfg_dev
1.1.0
org.apache.maven.plugins
maven汇编插件
主要资源
单一的
包裹
/src/main/assembly/resources.xml
程序集描述符:
它将生成以下工件:cfg_dev-1.1.0-resources.zip
请注意
这是一个压缩文件
“分类器”是资源(如程序集名称)
资源
拉链
假的
src/main/resources
主要项目:
pom.xml
请注意
这取决于zip存档
依赖项“分类器”是资源(类似于前面的程序集名称)
com.mycompany
cfg_dev
${project.version}
资源
拉链
测试
....
src/测试/资源
真的
${project.build.directory}/test资源
真的
org.apache.maven.plugins
maven依赖插件
解包cfg测试资源
解包依赖项
生成测试资源
${project.build.directory}/test资源
cfg_dev
${project.groupId}
真的
聚甲醛
测试
我希望这是清楚的,这将帮助您:)另一种方法是完全放弃压缩,使用标准的Maven生命周期将文件打包为jar文件中的资源,并通过类路径从其他项目访问它们
除非您有特定的打包要求(包括、排除等),否则这不需要额外的配置:只需将您的东西放在项目的src/main/resources
目录中即可
这种方法还有一个额外的好处,即当从IDE(如Eclipse)中调用时,可以不加更改地工作。如果您希望从命令行执行类似的操作(例如,从脚本执行,而不必编写pom.xml
文件),下面是一种方法
您可以指定各个属性:
mvn dependency:copy -DgroupId=org.apache.maven -DartifactId=maven-core -Dversion=2.2.1 -Dpackaging=zip -Dclassifier=thisistheattachedartifactsclassifier
或者在一个工件参数中指定它们:
mvn dependency:copy -Dartifact=org.apache.maven:maven-core:2.2.1:zip:thisistheattachedartifactsclassifier
对于后者,在packaging/type
属性之后,在末尾保留分类器
非常重要。像这样: