首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用maven的聚合和继承从子模块收集jars到父级tarball

如何使用maven的聚合和继承从子模块收集jars到父级tarball
EN

Stack Overflow用户
提问于 2017-12-03 07:05:56
回答 1查看 236关注 0票数 0

我有一个具有以下结构的多模块maven项目:

代码语言:javascript
复制
root module
            module A
            module B
            module C
                     module C-1
                     module C-2

模块C是本项目中的新模块。它的目标是为子模块C-1和C-2定义共享依赖关系(即它们是父模块),并定义模块C-1和C-2在模块的C target目录中构建成单个tar球的聚合 jars。

实现这一目标的途径是:

  • pom.xml列出模块A、B和C
  • 模块Cpom.xml列出模块C-1和C-2并声明共享依赖;它还声明打包为"pom“
  • 在模块C中使用maven-assembly-plugin查找它的子target目录中的所有*.jar文件,并将它们打包到tgz中。

在这个实现中,我面临着几个问题。简单的一个是C-1和C-2的自我依赖--它们从C继承依赖到自身,因此拒绝编译。我在C中解决了将依赖项封装到dependencyManagement中的问题,因此它看起来很有效。

我也仍然有装配插件的问题。当在文件集值中使用通配符时,它会在生成的tar球中保留目录结构,看起来您什么也做不了。因此,在C模块的bin.xml中具有以下功能

代码语言:javascript
复制
    <fileSet>
        <directory>${project.basedir}</directory>
        <outputDirectory>/</outputDirectory>
        <includes>
            <include>**/*.jar</include>
        </includes>
        <excludes>
            <exclude>**/*-javadoc.jar</exclude>
        </excludes>

    </fileSet>

tarball具有结构的结果

代码语言:javascript
复制
moduleC-version/moduleC-1/target/moduleC-1-version.jar
moduleC-version/moduleC-2/target/moduleC-2-version.jar

当我需要

代码语言:javascript
复制
moduleC-version/moduleC-1-version.jar
moduleC-version/moduleC-2-version.jar

好吧,这不太重要。主要问题是反应堆的建造顺序。不管我做什么都会导致

  1. 单元A
  2. 单元B
  3. 模块C
  4. 模块C-1
  5. 模块C-2

这是一个失败,因为构建在模块C上的抱怨

创建程序集失败:创建程序集存档bin时出错:必须至少设置一个文件。->帮助1

我的理解是,问题在于反应堆的建造顺序-- C-1和C-2应该在C之前构建--但是我无法理解如何管理它,让C作为他们的父级,并保持在模块结构的顶部。

EN

回答 1

Stack Overflow用户

发布于 2017-12-04 07:26:19

如果您需要像package这样的发行版(例如zip),您必须定义一个单独的模块,其中包含它的配置。此外,您需要定义希望打包成依赖关系的每个模块,以确保maven正确地完成构建顺序。

您必须使用的maven程序集插件描述符看起来类似于这是:

代码语言:javascript
复制
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">

  <id>dist-assembly</id>

  <formats>
      <format>zip</format>
  </formats>

  <includeBaseDirectory>false</includeBaseDirectory>

  <dependencySets>
      <dependencySet>
          <outputDirectory>/</outputDirectory>
          <useProjectArtifact>false</useProjectArtifact>
          <unpack>false</unpack>
          <scope>runtime</scope>
      </dependencySet>
  </dependencySets>
</assembly>

这些项目的结构看起来更像或更像这是:

代码语言:javascript
复制
+- pom.xml
+-- mod1
+-- mod2
+-- dist

更新:

如果只需要模块,则可以将其用作组装描述符:

代码语言:javascript
复制
  <moduleSets>
    <moduleSet>
      <useAllReactorProjects>true</useAllReactorProjects>
      <binaries>
        <outputDirectory>modules</outputDirectory>
        <unpack>false</unpack>
      </binaries>
    </moduleSet>
</moduleSets>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47616118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档