Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven-依赖于组装的拉链_Maven_Zip_Pom.xml_Maven Assembly Plugin_Maven Dependency Plugin - Fatal编程技术网

Maven-依赖于组装的拉链

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依赖插件 复制脚本 包裹 复

我正试图让一个项目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依赖插件
复制脚本
包裹
复制
${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
    属性之后,在末尾保留
    分类器
    非常重要。像这样: