Search code examples
mavenmaven-jar-plugin

Unable to disable generation of empty JAR (maven-jar-plugin)


Sometimes, my Talend Open Studio components have resources but not Java sources (they are purely metadata components). I need to disable the generation of JAR files in such a case.

I configured the maven-jar-plugin this way:

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.4</version>
        <configuration>
            <forceCreation>false</forceCreation>
            <skipIfEmpty>true</skipIfEmpty>
            <useDefaultManifestFile>false</useDefaultManifestFile>
        </configuration>
      </plugin>

but I still get the ${project.name}.jar file with pom.properties, pom.cml, the manifest and an empty file App.class containing only "class {}"

While I can disable the includes of all maven stuff using this:

<archive>
<addMavenDescriptor>false</addMavenDescriptor>
</archive>

I still get a JAR with the manifest file inside it

Are there some configuration parameters I misconfigured?


Solution

  • I found the solution by myself, even if it's only a workaround. I delete the JAR using a delete antrun task if /src/main/java directory doesn't exist:

    <!-- remove the empty JAR if not needed -->
    <if>
        <not><available file="${basedir}/src/main/java" type="dir" /></not>
        <then>
        <delete file="${project.build.directory}/${project.name}-${project.version}.jar"/>
        </then>
    </if>
    

    this task requires antcontrib to work properly and, ofc, it doesn't work if you plan to do releases with maven (but it's ok for metadata-only components, like Talend Open Studio plugins)