【问题标题】:Module:referencing another module from the desciptor模块:从描述符中引用另一个模块
【发布时间】:2009-09-17 11:28:37
【问题描述】:

我的模块 (APP1) 的程序集描述符是:

  <?xml version="1.0" encoding="UTF-8"?>
  <assembly>
  <id>report</id>
    <formats>
    <format>jar</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <moduleSets>
    <moduleSet>
      <includes>
    <include>*-APP2</include>[trying to refer to another module ie module-APP2]
      </includes>
      <sources>
    <fileSets>
      <fileSet>
        <directory>/</directory>
        <includes>
          <include>**/target</include>
        </includes>
      </fileSet>
    </fileSets>
    <excludeSubModuleDirectories>false</excludeSubModuleDirectories>
    <outputDirectoryMapping>/</outputDirectoryMapping>
      </sources>
    </moduleSet>
  </moduleSets>
 </assembly>

当我运行 mvn install cmd 时,我得到了

[WARNING] The following patterns were never triggered in this artifact inclusion filter:
o  '*-APP2'

我哪里出错了?

我修改为:

<?xml version="1.0" encoding="UTF-8"?><assembly>
  <id>report</id>
  <formats>
    <format>jar</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <moduleSets>
    <moduleSet>
      <includes>
    <include>sampleMaven:module-APP2</include>
      </includes>
      <sources>
    <fileSets>
      <fileSet>
        <directory>/</directory>
        <includes>
          <include>target/*</include>
        </includes>
      </fileSet>
    </fileSets>
    <excludeSubModuleDirectories>false</excludeSubModuleDirectories>
    <outputDirectoryMapping>/</outputDirectoryMapping>
      </sources>
    </moduleSet>
  </moduleSets>
</assembly>

仍然得到:

[WARNING] The following patterns were never triggered in this artifact inclusion filter:
o  'sampleMaven:module-APP2'

9 月 18 日更新: 主项目 pom.xml-->

http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 示例Maven 阿努 0.0.1-快照 呸

APP1

<module>APP2</module>

2)对于APP1,pom.xml是-->

   <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

阿努 示例Maven 0.0.1-快照 4.0.0 示例Maven APP1 APP1 0.0.1-快照 绒球
../APP2

<build>
 <plugins>
    <plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2-beta-3</version>
    <executions>
    <execution>
      <id>assemblyone</id>
      <phase>compile</phase>
      <goals>
            <goal>single</goal>
      </goals>
      <configuration>
        <finalName>App1</finalName>
        <appendAssemblyId>false</appendAssemblyId>
        <descriptors>
          <descriptor>${basedir}/src/main/resources/assemblies/report.xml</descriptor>
        </descriptors>
      </configuration>
    </execution>
     </executions>
    </plugin>
  </plugins>
</build> 
</project> ...

3)程序集描述符是-->

报告 罐 错误的

 <sources>
  <fileSets>
    <fileSet>
      <directory>/</directory>
      <includes>
       <include>target/*</include>
      </includes>
    </fileSet>
  </fileSets>
  <excludeSubModuleDirectories>false</excludeSubModuleDirectories>
  <outputDirectoryMapping>/</outputDirectoryMapping>
 </sources>
 <binaries>
   <outputDirectory>
      ${module.artifactId}-${module.version}
   </outputDirectory>
   <dependencySets>
      <dependencySet/>
   </dependencySets>
 </binaries>
</moduleSet>

在运行 gettting-->错误堆栈跟踪:

org.apache.maven.project.DuplicateProjectException: 项目 'sampleMaven:APP2' 在反应器中重复

【问题讨论】:

  • @unknown,我已重新格式化您的问题,使其正确显示。请注意,代码需要缩进 4 个空格(或制表符)才能被拾取,您还需要在它之前和之后有一个空行。如果没有该缩进,它将被视为 html,并且不会显示您的 xml。
  • @unknown 你好。如果您对 Rich 的回答感到满意,也许您可​​以对他的回答(上箭头)进行投票,并将他的回答标记为“接受”?然后读者和回答者知道你的问题处于什么状态,以及期望什么。您还可以获得更好的可能性,人们会花时间回答您未来的问题......

标签: maven-2


【解决方案1】:

更新:Maven 书在程序集中有一个关于including moduleSets 的部分。您在示例中采用的方法已被弃用。从父级定义模块集时,构建顺序也存在问题。必须首先构建父级,以便子级可以继承它,但必须构建子级,以便父级可以将其包含在其程序集中。 以下方法解决了该循环。

定义一个引用程序集模块的父 pom。

<?xml version="1.0" encoding="UTF-8"?>
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>name.seller.rich</groupId>
  <artifactId>test-parent</artifactId>
  <packaging>pom</packaging>
  <version>1.0.0</version>
  <modules>
    <module>test-assembly</module>
  </modules>
  <dependencies>
</project>

在组装模块中,定义一个具有实际应用程序模块的相对路径的模块,并定义组装插件配置:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>name.seller.rich</groupId>
  <artifactId>test-assembly</artifactId>
  <packaging>pom</packaging>
  <version>1.0.0-SNAPSHOT</version>
  <modules>
    <module>../my-app2</module>
  </modules>
  <build>
    <plugins>
      <plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2-beta-4</version>
    <executions>
      <execution>
        <id>assembly</id>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
        <configuration>
          <finalName>App1</finalName>
          <appendAssemblyId>false</appendAssemblyId>
          <descriptors>
            <descriptor>src/main/assembly/my-assembly.xml</descriptor>
          </descriptors>
        </configuration>
      </execution>
    </executions>
      </plugin>
    </plugins>
  </build>
</project>

而my-assembly.xml定义如下:

<?xml version="1.0" encoding="UTF-8"?><assembly>
  <id>my-assembly</id>
  <formats>
    <format>jar</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <moduleSets>  
    <moduleSet>
      <binaries>
        <outputDirectory>
          ${module.artifactId}-${module.version}
        </outputDirectory>
        <dependencySets>
          <dependencySet/>
        </dependencySets>
      </binaries>
    </moduleSet>
  </moduleSets>
</assembly>

构建父模块将导致构建顺序为:

  1. 测试父母
  2. 我的应用程序2
  3. 测试组装

因此,当程序集被打包时,my-app2 已构建,并可用于包含。二进制文件声明将包括 jars。

【讨论】:

  • 我按照你的建议试过了。仍然得到同样的错误。请检查我在主要问题中编辑的部分
  • +1 我在看你的回复,因为你没有完全解决他的问题。我知道你会改进你的答案。很高兴你这样做了,我会尝试了解它,因为我目前在组装方面也遇到了麻烦......
  • @KLE 谢谢。 Maven 书中关于组装模块的章节非常好,值得一读。虽然这本书或汇编插件文档都没有明确说明父母不能因为循环而包含孩子。
  • @Richseller ..感谢您提供的宝贵意见。我按照您提到的那样做了。我已将配置文件放在问题的已编辑部分中。我得到:[错误]检测到重复项目。项目:sampleMaven:APP2 文件:/Users/anu/EclipseWorks3.4/anu/APP2/pom.xml 文件:/Users/anu/EclipseWorks3.4/anu/APP2/pom.xml 注意:Maven 构建中的每个项目都必须具有 groupId 和 artifactId 的唯一组合。
  • 我认为你得到了这个,因为你已经将 APP2 声明为父组件和程序集中的模块。从父级中删除它,使其仅包含一次
【解决方案2】:

我仍在寻找构建多模块应用程序的解决方案,我想我快到了!!! :-)

诀窍是构建一个单独的模块并且不要将其添加到父级,因为您想构建您的父级(构建所有模块)然后调用程序集。

我有一个 zip 文件,其中包含我需要的所有内容,只有可执行 jar 不包含源...但我会尽快弄清楚。如果我可以让它工作,我会在这里粘贴解决方案:)

和平

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 2013-05-08
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多