无法禁用空JAR的生成(maven JAR插件)

无法禁用空JAR的生成(maven JAR插件),maven,maven-jar-plugin,Maven,Maven Jar Plugin,有时,我的Talend Open Studio组件有资源,但没有Java源(它们纯粹是元数据组件)。在这种情况下,我需要禁用JAR文件的生成 我通过以下方式配置了maven jar插件: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <ver

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

我通过以下方式配置了maven jar插件:

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

org.apache.maven.plugins
maven jar插件
2.4
假的
真的
假的
但是我仍然得到了${project.name}.jar文件,其中包含pom.properties、pom.cml、清单和一个只包含“class{}”的空文件App.class

虽然我可以使用以下方法禁用所有maven内容的包含:

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

假的
我仍然得到一个包含清单文件的JAR


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

我自己找到了解决方案,即使这只是一个解决办法。如果/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插件,这是可以的)

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

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

maven jar插件
2.3.1
默认jar
没有一个

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

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

此外,您还可以使用它的选项

下面的代码结合了这两种方法(只是为了让它们准备好复制粘贴):

。。。
org.apache.maven.plugins
maven jar插件
2.4
真的
假的
...
这可以正常工作,但当您执行
mvn安装时
,由于缺少项目工件而失败。 类似的问题可能会出现在
mvn部署
和发布版中,但我没有检查这些问题


但是,如果您可以接受antrun的delete,那么属性
skipIfEmpty
可能会很适合您,并且更加优雅。至少它不会引入新的执行及其依赖项等。

将打包类型更改为与jar不同的类型,但根据pom的片段,我不确定这是否能正常工作。我认为这不是一个好主意,因为对于那些具有src dir的组件,标准JAR文件实际上必须打包。我假设如果您通过Maven.yep发布,这将失败,但是Talend组件发布只是目标文件夹中一些文件的复制粘贴。我想您应该使用
artifactId
而不是
name
,或者更好的是,只使用
finalName
-是的,这是正确的答案,请参阅tnx Petr以获取答案,但我注意到,在配置(实际上是我使用的配置)中,JAR文件仍然会生成,清单文件onlystrange-难道你没有忘记应用
skipIfEmpty
属性吗?因为在我的测试pom中,这确实会导致
mvn clean package
停止创建它。或者您忘记了清洁
?(无意冒犯-它只是在我的机器上重复工作,所以我不敢相信:)100%肯定:)也许是因为我有一个(尽管是空的)资源目录?这肯定是最优雅的方式。但是我需要有条件地禁用jar创建(即,仅当/src/main/java不存在时),如果您执行“mvn安装”,这将失败,并出现错误“未能执行goal org.apache.maven.plugins:maven install plugin:2.5.2:install(默认安装)on project xxx:此项目的打包未将文件分配给构建工件”这为我修复了它:
maven-jar-plugin-default-jar-none maven-install-plugin-default-install-none
...
        <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>
...