mcating
mcating

Reputation: 1102

mvn process-resources doesn't pull down uber jar created with shade plugin

Goal: Create an executable uber jar with maven shade plugin that can be executed during the mvn compile of another pom.

Repro steps:

  1. Create a pom.xml for the "publisher" component using below pom.
  2. Use a Jenkins build to mvn deploy it (mvn install will work as well)
  3. Add dependency to pom.xml for "consumer" (pom below)
  4. mvn compile the consumer

Expected behavior: Uber jar for publisher is downloaded somewhere in consumer/target directories

Actual: Uber jar does not appear in consumer directory

Component 1: Publisher

<?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.mec.experiment</groupId>
<artifactId>publisher</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.2.6.Final</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifestFile>src/main/resources/META-INF/MANIFEST.mf</manifestFile>
                </archive>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.3</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Component 2: Consumer

<?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.mec.experiment</groupId>
<artifactId>consumer</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
    <dependency>
        <groupId>com.mec.experiment</groupId>
        <artifactId>publisher</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>

Upvotes: 1

Views: 254

Answers (1)

Jon Sampson
Jon Sampson

Reputation: 1551

The answer from the possible duplicate I linked to in the comments has a link to a dead example page. Here's a supplement for you. The plugin configuration would belong inside the consumer pom.

exec:java

Full name:

org.codehaus.mojo:exec-maven-plugin:1.5.0:java

Description: Executes the supplied java class in the current VM with the enclosing project's dependencies as classpath.

Attributes:

Requires a Maven project to be executed. Requires dependency resolution of artifacts in scope: test. The goal is thread-safe and supports parallel builds. Since version: 1.0.

See especially executableDependency for your use case. That looks like it will allow you to reference producer according to its group id and artifact instead of hard-coding a path.

Upvotes: 1

Related Questions