有时,我的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
是否有一些我配置错误的配置参数?
答案 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
可能会对您有效,并且更加优雅。至少它不会引入新的执行及其依赖等。