2011-11-23 75 views
10

我有一个使用一些自定义JAR的[未在任何存储库中找到]的Maven项目。为了将它们与Maven构建一起添加,我使用了maven中的attach-artifact目标。以下是我的POM文件:Maven:附加多个工件

<?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/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.maximus</groupId> 
    <artifactId>adminbuild</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>pom</packaging> 
    <name>adminbuild</name> 

    <build> 
    <sourceDirectory>src/main/java</sourceDirectory> 
    <testSourceDirectory>src/test/java</testSourceDirectory> 
    <outputDirectory>target</outputDirectory> 
    <plugins> 
     <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>build-helper-maven-plugin</artifactId> 
     <version>1.7</version> 
     <executions> 
      <execution> 
      <id>attach-artifacts</id> 
      <phase>package</phase> 
      <goals> 
       <goal>attach-artifact</goal> 
      </goals> 
      <configuration> 
       <artifacts> 
       <artifact> 
        <file>${basedir}/../../resources/dependencies/java/customjar1.jar</file> 
        <type>jar</type> 
       </artifact> 
       <artifact> 
        <file>${basedir}/../../resources/dependencies/java/customjar2.jar</file> 
        <type>jar</type> 
       </artifact> 
       </artifacts> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

使用这些罐子我的项目[customjar1.jar,customjar2.jar]有他们的上述POM文件[adminbuild]依赖性。

当我执行mvn clean install命令,我收到以下错误:

[ERROR] Failed to execute goal org.codehaus.mojo:build-helper-maven-plugin:1.7:attach-artifact (attach-artifacts) on project adminbuild: The artifact with same type and classifier: jar:null is used more than once. -> [Help 1] 

以下是mvn -version命令的输出:

Apache Maven 3.0.3 (r1075438; 2011-02-28 23:01:09+0530) 
Maven home: C:\maven 
Java version: 1.6.0_26, vendor: Sun Microsystems Inc. 
Java home: C:\Java\jdk1.6.0_26\jre 
Default locale: en_IN, platform encoding: Cp1252 
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows" 

看来,我附上了文物的方法是不正确。我不应该在同一个pom文件中附加多个工件吗?如果是,那么如何。请帮忙。

回答

6

附加构件通常用于安装由构建创建的其他文件,例如webapp,文档或来源的类jar。

要将文件添加到您的Maven存储库,以便它们可以作为依赖项提供,您应该使用install-file目标。

编辑:附加的工件由与您的主项目相同的groupId和artifactId标识,但使用不同的分类器。在你的配置中,你没有指定分类器,因此是错误信息。

2

你会想要在像nexus这样的资源库管理器中使用这些自定义jar,以便它们可以像普通的依赖jar一样下载/使用。

假设这是不可能的,并且看到这些罐子位于众所周知的位置,也许您可​​以在需要它们的项目中指定这些具有system范围的自定义罐子?

<project> 
    ... 
    <dependencies> 
    <dependency> 
     <groupId>my-group</groupId> 
     <artifactId>customjar1</artifactId> 
     <version>a.b.c</version> 
     <scope>system</scope> 
     <systemPath>${basedir}/../../resources/dependencies/java/customjar1.jar</systemPath> 
    </dependency> 
    </dependencies> 
    ... 
</project>