How to register a custom built jar file as maven main artifact?

gmaven-plugin, jar, maven, maven-antrun-plugin

Solution

I checked the sources of JarMojo and it gave me an idea how to solve it with Groovy (via gmaven)

<plugin>
  <groupId>org.codehaus.gmaven</groupId>
  <artifactId>gmaven-plugin</artifactId>
  <version>1.3</version>
  <executions>
    <execution>
      <id>set-main-artifact</id>
      <phase>package</phase>
      <goals> 
        <goal>execute</goal>
      </goals>
      <configuration>
        <source>
          project.artifact.setFile(new File("./bin/classes.jar"))
        </source>
      </configuration>
    </execution>
  </executions>
</plugin>

and it works!:)

Problem

I have a project expected to deliver a jar file: ``` <packaging>jar</packaging> ``` but the jar is built in a custom way, so the default packaging done with jar:jar has been disabled ``` <plugin> <artifactId>maven-jar-plugin</artifactId> <version>2.3.2</version> <executions> <execution> <id>default-jar</id> <phase>none</phase> </execution> </executions> </plugin> ``` but then when I want to apply shade:shade on the existing jar I get an error The project main artifact does not exist. I assume that maven doesn't know about the .jar file created by my custom tool. How to let it know, because antrun attachArtifact doesn't work ``` <attachartifact file="./bin/classes.jar" classifier="" type="jar"/> ``` the error I get is An Ant BuildException has occured: org.apache.maven.artifact.InvalidArtifactRTException: For artifact {:jar}: An attached artifact must have a different ID than its corresponding main artifact. So this is not the method to register main artifact... Is there any (without writing custom java plugin)? Thanks, Lukasz

Original source