正确使用maven程序集插件中的排除术语

时间:2011-08-05 20:18:22

标签: maven maven-assembly-plugin meta-inf

简短:我需要从一组jar中过滤所有.java个文件和每个META-INF文件夹,并将来自该jar的类文件和资源打包到一个jar中。 我目前使用maven-assembly-plugin,但只要可以轻松地将其集成到maven构建过程中,就会尝试其他方法。

long:我使用maven来管理我的工具的不同开发阶段。 基本阶段是免费软件,第二阶段是更多功能,第三阶段是所有功能)

到目前为止工作正常,我使用配置文件将不同的源目录添加到类路径中,并将源代码整齐地编译到project.jar

  • 第一个问题:通过配置文件包含在项目中的.java来源最终位于project.jar

然后我使用maven-assembly-plugin构造一个final.jar,它还包含依赖项,最后使用launch4j为windows生成可执行文件(当前目标平台)。

  • 第二个问题:依赖关系罐中的各个META-INF部分混合在final.jar中,我希望它们都被跳过。

我使用assembly.xml标记搜索了<exclude>的示例,但未找到任何使用dependencySet<exclude>*.java</exclude>组合的示例。 我甚至不能肯定我能做到这一点。

这是我的assembly.xml:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
    <id>jar-with-dependencies</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <outputDirectory>/</outputDirectory>
            <useProjectArtifact>true</useProjectArtifact>
            <unpack>true</unpack>
            <scope>runtime</scope>
            <useDefaultExcludes>true</useDefaultExcludes>
            <!--<useTransitiveFiltering>true</useTransitiveFiltering>-->
            <!--<useStrictFiltering>true</useStrictFiltering>-->
            <excludes>
                <exclude>META-INF</exclude>
                <exclude>**/*.java</exclude>
                <exclude>*.java</exclude>
                <exclude>*:sources</exclude>
            </excludes>
        </dependencySet>
    </dependencySets>
</assembly>

到目前为止我的研究:

我使用example assembly.xml exclude java搜索,但找不到涵盖我问题的示例。 (过去几天我也搜索了很多但是没有保存我找到的所有内容) 我已阅读http://maven.apache.org/plugins/maven-assembly-plugin/advanced-descriptor-topics.html,但无法将这些知识应用于我的问题。

2 个答案:

答案 0 :(得分:1)

好的,所以我想出来了。

首先:从我使用的配置文件中包含的源部件中过滤掉java和其他源文件:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>de.steamnet.oneClickWonder.awt.OCWController</mainClass>
                    </manifest>
                </archive>
                <excludes>
                    <exclude>**/*.java</exclude>
                    <exclude>**/*.form</exclude>
                </excludes>
            </configuration>
        </plugin>

当我开始使用安装程序时,从依赖项中过滤META-INF的任务已经消失,所以现在我可以使用自己的META-INF交付多个jar。

因此,正如Michael-O所述,这种方法(使用配置文件包含其他源部件)可能不是正确的做法,但它非常方便,我坚持下去。使用jar插件中的excludes标签,将源文件添加到最终jar中的麻烦也消失了。

答案 1 :(得分:-1)

这绝对是错误的方法。永远不要为每个工件ID生成多个主jar。你应该使用这种方法:

  1. 为每个主jar创建一个模块。
  2. 将依赖关系从完整设置为基础等等。
  3. 现在你必须选择重新包装你的东西。您可以使用树形插件,它将以您想要/需要的方式包含工件,或者您使用dependency:unpack-dependencies并将这些内容放在输出目录中。
  4. 之后,您将最终得到“聚合”的jar文件。使用配置文件和asm插件执行此操作只需扩展。

    完成为tar.gz或您的发行版创建另一个模块并依赖于主jar并捆绑您的程序集。你完成了!

    Viel ErfolgundGrußnachDüren