首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法禁用生成空JAR (maven-jar-plugin)

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

Stack Overflow用户
提问于 2012-11-04 19:59:26
回答 3查看 7.1K关注 0票数 3

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

我这样配置maven-jar-plugin:

代码语言:javascript
复制
<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>

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

虽然我可以使用下面的代码禁用所有maven内容的包含:

代码语言:javascript
复制
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
</archive>

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-04 22:33:59

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

代码语言:javascript
复制
<!-- 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插件)

票数 1
EN

Stack Overflow用户

发布于 2012-11-07 06:06:41

禁用jars创建的最有效方法是像这样配置maven-jar-plugin

代码语言:javascript
复制
<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阶段,它将永远不会运行。

票数 8
EN

Stack Overflow用户

发布于 2012-11-07 07:19:08

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

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

下面的代码将这两者结合起来(只是为了让它们准备好复制-粘贴)

代码语言:javascript
复制
...
        <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和release上,但我没有检查这些问题。

但是,如果您可以接受antrun的delete,那么属性skipIfEmpty可能会为您工作得很好,而且会更优雅一些。至少它不会引入新的执行及其依赖关系等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13218313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档