maven依赖拷贝的奇怪错误

时间:2010-09-23 22:30:58

标签: maven-2 dependencies

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

首先 - 如果我按照指示here并将其添加到我的顶级pom:

<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”文件,我想要模块工件。如何排除它们?

与此相关 - 有没有办法向项目中添加某种类型的自定义类型或标签,这样我就可以让依赖副本在一种子项目中以一种方式工作,在另一种类型上以不同的方式工作?

maven的新手 - 所以请保持温和。

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}指向/ Release与顶级pom处于同一级别。

跟进:那么我的听力是依赖:复制不是要走的路,而是使用汇编。

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

要添加东西 - 有2种常规类型的组件,jar组件(制作单个jar文件),以及生成,ear,war,jar,rar和config文件的j2ee组件。

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

想点什么?

2 个答案:

答案 0 :(得分:1)

  

我尝试使用程序集插件,但似乎没有办法将构建工件从多个子项目复制到单个输出目录 - 除非我在这里缺少一些基本的东西。

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

你在这里描述的内容绝对可以使用Maven Assembly插件,实现这一点的一个好方法是创建一个专用的分发项目模块,声明其POM中其他模块的依赖关系并使用{{1}在自定义程序集描述符中。

结构类似:

.
|-- 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

对于汇编描述符,看一下Maven Book的8.6. Best Practices部分,他们描述了这种方法并提供了汇编描述符样本。根据您的需要调整它,使用dependencySets格式而不是存档格式。这是一个很好的起点。

资源

参考

答案 1 :(得分:0)

我想你可能在马前有车。你要求依赖:复制到存储库(这就是副本所做的)来获取你的工件。但是,您仍处于安装阶段,因此您的工件可能尚未在存储库中

无论如何,以这种方式访问​​您的构建工件有些不同寻常。有没有什么理由你不能去抓target / foo.jar,因为你知道基于Maven目录约定你的工件将在包阶段之后?