有时,我的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>但是我仍然得到了${project.name}.jar文件,其中包含pom.properties、pom.cml、清单和一个只包含“App.class {}”的空文件类
虽然我可以使用下面的代码禁用所有maven内容的包含:
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
</archive>我仍然得到一个包含清单文件的JAR
是否有一些配置参数配置错误?
发布于 2012-11-04 22:33:59
我自己找到了解决方案,即使这只是一个变通办法。如果/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插件)
发布于 2012-11-07 06:06:41
禁用jars创建的最有效方法是像这样配置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阶段,它将永远不会运行。
发布于 2012-11-07 07:19:08
您可以指示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和release上,但我没有检查这些问题。
但是,如果您可以接受antrun的delete,那么属性skipIfEmpty可能会为您工作得很好,而且会更优雅一些。至少它不会引入新的执行及其依赖关系等。
https://stackoverflow.com/questions/13218313
复制相似问题