代码之家  ›  专栏  ›  技术社区  ›  Jon

maven依赖项副本出现奇怪错误

  •  1
  • Jon  · 技术社区  · 14 年前

    我正在尝试设置maven构建,以便将所有构建工件和其他生成的文件复制到一个中心目录中进行分发。在阅读了文档之后,汇编插件和依赖插件似乎是要使用的。但我不能让他们一起玩得很好。

    首先-如果我按照指示 here

    <plugin>  
      <groupId>org.apache.maven.plugins</groupId>  
      <artifactId>maven-dependency-plugin</artifactId>  
      <executions>  
        <execution>  
          <id>copy-installed</id>  
          <phase>install</phase>  
          <goals>  
            <goal>copy</goal>  
          </goals>  
          <configuration>  
            <artifactItems>  
              <artifactItem>  
                <groupId>${project.groupId}</groupId>  
                <artifactId>${project.artifactId}</artifactId>  
                <version>${project.version}</version>
                <type>${project.packaging}</type>
              </artifactItem>
            </artifactItems>
            <outputDirectory>${ReleaseFolder}</outputDirectory>
          </configuration>
        </execution>
      </executions>
    </plugin>
    

    一切似乎都很好,直到我运行一个干净的安装后-然后maven抱怨它找不到我的顶级pom安装。这似乎违反直觉。。。我不想复制“pom”文件,我想要模块工件。如何排除它们?

    与此相关的是,有没有一种方法可以将自定义类型或某种类型的标记添加到项目中,这样我就可以在一种类型的子项目上以一种不同的方式复制依赖性,而在另一种类型上以不同的方式复制依赖性?

    edit: 我的项目结构如下所示:

    /pom.xml (top level pom)
    Common_data
    ComponentA
    ComponentB
    ComponentC
    ComponentT (depends on A, B and C)
    J2ee_A
        j2ee_A_ear (depends on war)
        j2ee_A_rar
        j2ee_A_war
    
    J2ee_B 
        j2ee_B_ear (depends on war)
        j2ee_B_rar
        j2ee_B_war
        j2ee_B_jar (depends on ComponentB)
    

    然后${ReleaseFolder}指向与顶级pom处于同一级别的/Release。

    跟进:

    如何让程序集在许多不同的模块上运行,然后将生成的文件复制到 输出目录?

    另外,还有两种通用的组件,一种是jar组件(生成一个jar文件),另一种是j2ee组件(生成ear、war、jar、rar和config文件)。

    如果有一种方法可以将我自己的标记分配给一个项目,然后基于该标记值运行程序集,那么我可以看到它正在工作。但是我在文档中没有找到任何关于如何触发或跳过基于子项目中用户定义属性的程序集的内容。

    有人吗?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Pascal Thivent    14 年前

    我尝试使用汇编插件,但是似乎没有办法将构建工件从多个子项目复制到一个输出目录,除非我在这里遗漏了一些基本的东西。

    在我看来,你应该 在所有模块之间引入紧密耦合,因此 不是 按照某人的建议,直接从目标抓取东西,这样做根本上是错误的。

    dependencySets 在自定义程序集描述符中。

    类似这样的结构:

    .
    |-- pom.xml (top level pom)
    |-- Common_data
    |-- ComponentA
    |-- ComponentB
    |-- ComponentC
    |-- ComponentT (depends on A, B and C)
    |-- J2ee_A
    |   |-- j2ee_A_ear (depends on war)
    |   |-- j2ee_A_rar
    |   `-- j2ee_A_war
    |-- J2ee_B 
    |   |-- j2ee_B_ear (depends on war)
    |   |-- j2ee_B_rar
    |   |-- j2ee_B_war
    |   `-- j2ee_B_jar (depends on ComponentB)
    `-- distro
        |-- pom.xml
        `-- src
            `-- main
                `-- assembly
                    `-- myassembly.xml

    对于程序集描述符,请看一节 8.6. Best Practices 在Maven的书中,他们描述了这种方法并提供了一个汇编描述符示例。调整它以适应您的需要,使用 dir

    资源

    工具书类

        2
  •  0
  •   RonU xtoddx    14 年前

    无论如何,以这种方式访问构建工件有点不合常规。有什么理由你不能直接去抓目标吗/foo.jar文件,因为您知道基于Maven目录约定,在包阶段之后您的工件将在哪里?