无法禁用空JAR(maven-jar-plugin)的生成

时间:2012-11-04 11:59:26

标签: maven maven-jar-plugin

有时,我的Talend Open Studio组件有资源但没有Java源(它们纯粹是元数据组件)。在这种情况下,我需要禁用JAR文件的生成。

我用这种方式配置了maven-jar-plugin:

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

但我仍然使用pom.properties,pom.cml,清单和仅包含“class {}”的空文件App.class获取$ {project.name} .jar文件

虽然我可以使用此功能禁用所有maven内容:

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

我仍然在里面找到一个包含清单文件的JAR

是否有一些我配置错误的配置参数?

3 个答案:

答案 0 :(得分:6)

禁用jar创建的最有效方法是配置maven-jar-plugin,如下所示:

<plugins>
    <plugin>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.3.1</version>
        <executions>
            <execution>
                <id>default-jar</id>
                <phase>none</phase>
            </execution>
        </executions>
    </plugin>
</plugins>

它会将默认jar创建置于none阶段,永远不会运行。

答案 1 :(得分:1)

我自己找到了解决方案,即使它只是一种解决方法。如果/ src / main / java目录不存在,我使用delete antrun任务删除JAR:

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

此任务需要antcontrib才能正常工作,并且,如果您计划使用maven进行发布,它就不起作用(但是对于仅元数据的组件,例如Talend Open Studio插件,它是可以的)

答案 2 :(得分:1)

您可以指示maven-jar-plugin不生成META-INF / maven / * / pom。文件,如Maven Archiver Reference中所述。

此外,您可以使用其skipIfEmpty选项。

以下代码结合了这些(只是让它们准备好复制粘贴)

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

这样可以正常工作,但是当你执行mvn install时,由于缺少项目工件而失败。 类似的问题可能是mvn deploy和释放,但我没有检查这些。

但是,如果您可以使用antrun的删除,那么属性skipIfEmpty可能会对您有效,并且更加优雅。至少它不会引入新的执行及其依赖等。