thn929
thn929

Reputation: 21

How can you use a dependency from the plugin's dependency scope in the maven-antrun-plugin?

We have a profile that uses maven-antrun-plugin to run a downloaded JAR.

Exhibit A: (this works)

We can reference the downloaded JAR using the property ${maven.dependency.com.foobar.target-jar.jar.path} (Can I use the path to a Maven dependency as a property?). But in this solution, the custom dependency and repository information isn't limited to just the scope of the profile.

<project>
    ...
    <repositories>
        <repository>
            <id>thirdparty</id>
            <name>Third Party</name>
             <url>
                 [URL for the repository that holds the target JAR]
             </url>
             <layout>default</layout>
        </repository>
    </repositories>
    ...
    <dependencies>
        <dependency>
            <groupId>com.foobar</groupId>
            <artifactId>target-jar</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>
    ...
    <profiles>
        <profile>
            <id>runJARprofile</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <version>1.8</version>
                        <inherited>false</inherited>
                        <executions>
                            <execution>
                                <id>run-jar</id>
                                <phase>package</phase>
                                <configuration>
                                    <target name="runJar" fork="true">
                                        <java jar="${maven.dependency.com.foobar.target-jar.jar.path}" />
                                    </target>
                                </configuration>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
...
</project>

Exhibit B: (haven't gotten it working)

Here, we moved the dependency and repository information into the profile. Maven downloads the artifact successfully, but we no longer know how to reference it by property.

<project>
    ...

    <profiles>
        <profile>
            <pluginRepositories>
                <repository>
                    <id>thirdparty</id>
                    <name>Third Party</name>
                     <url>
                         [URL for the repository that holds the target JAR]
                     </url>
                     <layout>default</layout>
                </repository>
            </pluginRepositories>
            ...
            <id>runJARprofile</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <version>1.8</version>
                        <inherited>false</inherited>
                        <dependencies>
                            <dependency>
                                <groupId>com.foobar</groupId>
                                <artifactId>target-jar</artifactId>
                                <version>1.0.0</version>
                            </dependency>
                        </dependencies>
                        <executions>
                            <execution>
                                <id>run-jar</id>
                                <phase>package</phase>
                                <configuration>
                                    <target name="runJar" fork="true">
                                        <java jar="${?????}" />
                                    </target>
                                </configuration>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
...
</project>

Upvotes: 1

Views: 667

Answers (1)

Gerold Broser
Gerold Broser

Reputation: 14772

I crated a POM similar to your Exhibit B here and got the following message during a mvn package -P runJARprofile:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.8:run
(run-jar) on project so-36848518: An Ant BuildException has occured:
Cannot execute a jar in non-forked mode. Please set fork='true'.
[ERROR] around Ant part ...<java jar="${my:test:jar}"/>...

I changed the respective line to:

<java jar="${my:test:jar} fork="true"/>

and:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

Upvotes: 1

Related Questions