【问题标题】:Assembly plugin assembling module dependencies not full project dependencies组装插件组装模块依赖项不是完整的项目依赖项
【发布时间】:2012-10-01 22:30:17
【问题描述】:

基本上我有一个具有这种结构和依赖关系的多模块项目

pom - With dependencies with scope provided
  + ---- mod1 - with mod1 dependencies
          + -----  depends on libAAA
          + ------ depends on libBBB
  + ---- mod2 - with mod2 dependencies
          + -----  depends on libXXX
          + ------ depends on libYYY

Assembly(使用 maven-assembly-plugin)预计如下所示:

bin/lib      - Contains all provided dependencies
bin/mod1/    - Contains mod1 artifact
bin/mod1/lib - Contains mod1 dependencies (only mod1) 
bin/mod2/    - Contains mod2 artifact
bin/mod2/lib - Contains mod2 dependencies (only mod2) 

一切都“几乎”按预期工作,但所有项目依赖项 被复制到 mod1/lib 和 mod2/lib 所以生成的程序集看起来是这样的

bin/mod1/lib
bin/mod2/lib
   BOTH containing libAAA, libBBB, libXXX, libYYY

我期望得到的是:

bin/mod1/lib
    containing libAAA, libBBB
bin/mod2/lib
    containing libXXX, libYYY

有人知道是否可以在不使用过滤器的情况下在每个目录上复制“隔离”(不确定使用什么词)模块依赖项?

提前致谢, 托尼奥

【问题讨论】:

  • assembly.xml 很简单,如果有人需要看,我会毫不费力地添加。
  • 我真的认为有必要向我们展示assembly.xml。我需要知道你是如何设置的。你在哪里使用maven-assembly-plugin?是在顶部 pom 中还是在每个孩子中?
  • 添加了程序集描述符和 pom 的配置作为对这个问题的回答,感谢 maba

标签: maven maven-assembly-plugin


【解决方案1】:

我正在添加程序集描述符。

如前所述,此描述符设置在名为 distribution 的“pom”模块中 在多模块项目的 maven-assembly-plugin 文档中。

我尝试生成 2 个 moduleSet 而不是一个, 每个模块一个,结果和上面描述的一样。

XML 和 pom 配置如下:


    <?xml version="1.0" encoding="UTF-8"?>
    <assembly
        xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
        <id>bin</id>

        <formats>
            <format>dir</format>
            <format>jar</format>
        </formats>

        <includeBaseDirectory>true</includeBaseDirectory>
        <baseDirectory>basic-modules</baseDirectory>

        <dependencySets>
            <dependencySet>
                <unpack>false</unpack>
                <scope>provided</scope>
                <outputDirectory>lib</outputDirectory>
                <excludes>
                    <exclude>*:payment-api</exclude>
                </excludes>
            </dependencySet>
        </dependencySets>

        <moduleSets>
            <moduleSet>

                <!-- Enable access to all projects in the current multimodule build! -->
                <useAllReactorProjects>true</useAllReactorProjects>

                <!-- Now, select which projects to include in this module-set. -->
                <includes>
                    <include>*:paypal-payment</include>
                    <include>*:moneris-payment</include>
                </includes>

                <binaries>
                    <outputDirectory>${module.artifactId}</outputDirectory>
                    <outputFileNameMapping>${module.artifactId}.${module.extension}</outputFileNameMapping>
                    <unpack>false</unpack>
                    <dependencySets>
                        <dependencySet>
                            <unpack>false</unpack>
                            <scope>runtime</scope>
                            <outputDirectory>${module.artifactId}/lib</outputDirectory>
                        </dependencySet>
                    </dependencySets>
                </binaries>
            </moduleSet>

        </moduleSets>
    </assembly>    

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <executions>
                    <execution>
                        <id>distro-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <finalName>basic-modules-${pom.version}</finalName>
                            <appendAssemblyId>false</appendAssemblyId>
                            <descriptor>assembly.xml</descriptor>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

【讨论】:

  • 有没有一种方法可以测试仅从命令行运行的程序集 (mvn assembly:single -Ddescriptor=xxxxx),当我这样做而不是运行 mvn package 时,会发生各种奇怪的结果,即与运行包阶段时不同,尽管唯一的区别是程序集文件
  • 似乎dependencySet只是程序集中包含的所有工件共有的一个集合,适用于根DependencySet和模块DependencySet,我没有找到区分依赖项来自何处的方法
猜你喜欢
  • 2019-12-03
  • 2013-08-26
  • 2016-08-21
  • 1970-01-01
  • 2015-01-24
  • 2016-09-16
  • 2013-03-28
  • 2022-01-15
  • 2021-10-15
相关资源
最近更新 更多