根据其他项目从maven项目构建jar

时间:2014-11-07 18:25:25

标签: java eclipse spring maven

我在eclipse中有一个名为abc-caller的spring maven项目。我需要创建一个项目的jar。该项目取决于abc-lt-core。我对这种依赖关系没有任何控制权

<dependency>
    <groupId>com.abc.lt</groupId>
    <artifactId>abc-lt-core</artifactId>
    <version>5.1.4</version>
</dependency>

abc-caller的POM

<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.abc</groupId>
    <artifactId>abc-caller</artifactId>
    <version>1.0</version>
    <name>caller</name>

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <excludes>
                    <exclude>*.*</exclude>
                </excludes>
                <filtering>false</filtering>
            </resource>
        </resources>

         <defaultGoal>install</defaultGoal> 

    <plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>shade</goal>
                </goals>
                <configuration>
                    <finalName>Caller</finalName>
                    <transformers>
                        <transformer
                            implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                            <manifestEntries>
                                <Main-Class>com.abc.Caller</Main-Class>
                                <Build-Number>1</Build-Number>
                            </manifestEntries>
                        </transformer>
                    </transformers>
                </configuration>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
            <source>1.7</source>
            <target>1.7</target>
        </configuration>
    </plugin>
</plugins>
</build>

    <dependencies>

        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-all</artifactId>
            <version>5.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-pool</artifactId>
            <version>5.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jms</artifactId>
            <version>3.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.abc.lt</groupId>
            <artifactId>abc-lt-core</artifactId>
            <version>5.1.4</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>3.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jmx</artifactId>
            <version>2.0.8</version>
        </dependency>
    </dependencies>
</project>

在buildind maven项目中我收到以下错误

   Downloading: http://repo.maven.apache.org/maven2/com/abc/lt/abc-lt/${masterVersionNumber}/abc-lt-${masterVersionNumber}.pom
    Downloading: http://repo.opengeo.org/com/abc/lt/abc-lt/${masterVersionNumber}/abc-lt-${masterVersionNumber}.pom
    Downloading: http://www.hibernatespatial.org/repository/com/abc/lt/abc-lt/${masterVersionNumber}/abc-lt-${masterVersionNumber}.pom
    Downloading: http://repo1.maven.org/maven2/com/abc/lt/abc-lt/${masterVersionNumber}/abc-lt-${masterVersionNumber}.pom
---------
BUILD FAILURE
-----------------


 Failed to execute goal on project abc-lt-caller: Could not resolve dependencies for project com.abc:abc-lt-caller:jar:1.0: 
 Failed to collect dependencies for [org.apache.activemq:activemq-all:jar:5.8.0 (compile), 
 org.apache.activemq:activemq-pool:jar:5.8.0 (compile), org.springframework:spring-jms:jar:3.2.4.RELEASE (compile), 
 com.abc.lt:abc-lt-core:jar:5.1.4 (compile), org.springframework:spring-core:jar:3.2.4.RELEASE (compile), 
 org.springframework:spring-jmx:jar:2.0.8 (compile)]: 

 Failed to read artifact descriptor for com.abc.lt:abc-lt-core:jar:5.1.4: 
 Could not transfer artifact com.abc.lt:abc-lt:pom:${masterVersionNumber} 
 from/to central (http://repo.maven.apache.org/maven2): Illegal character in path at index 71:
 http://repo.maven.apache.org/maven2/com/abc/lt/abc-lt/
 ${masterVersionNumber}/abc-lt-${masterVersionNumber}.pom -> [Help 1]

2 个答案:

答案 0 :(得分:1)

您的问题与您的项目无关,似乎与依赖项目的POM有关。

您收到的错误告诉您,网址/路径上存在阻止Maven解析依赖关系的非法字符。

  

无法读取工件描述符   com.abc.lt:abc-lt-core:jar:5.1.4:无法传输工件   com.abc.lt:abc-lt:pom:${masterVersionNumber} from / to central   (http://repo.maven.apache.org/maven2):路径中的非法角色   索引71: http://repo.maven.apache.org/maven2/com/abc/lt/abc-lt/    $ {masterVersionNumber} / abc-lt - $ {masterVersionNumber} .pom - &gt; [帮助1]

请参阅粗体文字。它没有解析$ {masterVersionNumber}属性。我怀疑这是部署的问题。

如果您无法控制它,可以手动下载JAR并将其安装到您当地的m2 repo并以此方式构建吗?这应该允许你过去直到它被修复。

答案 1 :(得分:0)

如果你需要创建一个具有依赖性的jar,你可以使用maven-assembly-plugin的单一目标。

...

<build>
...
    <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>

                        <mainClass>MAIN_CLASS</mainClass>
                    </manifest>
                </archive>
                <!-- <finalName>JAR_NAME/finalName> -->
                <descriptorRefs>

                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
    </plugin>
...
</build>
...

此插件已添加到maven(<phase>package</phase>)生命周期的包装阶段。 jar-with-dependencies生成一个包含所有依赖项的jar。