likeGreen
likeGreen

Reputation: 1079

Build a jar from a maven project dependent on other project

I have spring maven project in eclipse called abc-caller. I need to create a jar of the project. The project depends on abc-lt-core. I don't have any control on this dependency

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

POM of abc-caller

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

On buildind the maven project I am getting the following error

   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]

Upvotes: 2

Views: 1241

Answers (2)

Ryan J
Ryan J

Reputation: 8323

Your problem isn't with your project, it seems to be with the POM of the dependent project.

The error you are getting is telling you there's an illegal character on the URL/path that is preventing Maven from resolving the dependency.

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]

See the bold text. It's not resolving the ${masterVersionNumber} property. I suspect it's a problem on the deployment.

If you don't have control over it, can you download the JAR manually and install it to your local m2 repo and build that way? That should allow you to get by until it's fixed.

Upvotes: 1

kiuby_88
kiuby_88

Reputation: 354

If you need create a jar with dependences you could using the single goal of 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>
...

This plugin is added to packaging phase of the lifecicle of maven (<phase>package</phase>). The jar-with-dependencies generates an only jar which contains all the dependencies.

Upvotes: 0

Related Questions