1

简而言之:我需要从一组 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依赖 jar 中的各个部分混合在一起,final.jar我希望它们都被跳过。

我已经搜索了assembly.xml使用<exclude>标签的示例,但没有找到任何使用我的dependencySetand组合的示例<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但无法申请我的问题的知识。

4

2 回答 2

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 中的麻烦也消失了。

于 2011-09-03T19:38:59.227 回答
-1

这绝对是错误的做法。切勿为每个工件 ID 生成一个以上的主 jar。您应该使用这种方法:

  1. 为每个主 jar 创建一个模块。
  2. 将依赖项从完全设置为基本等等。
  3. 现在你必须选择重新包装你的东西。您可以使用 shade 插件,它将以您想要/需要的方式包含工件,或者您使用dependency:unpack-dependencies并将这些东西放在输出目录中。

之后,您将得到“聚合”的 jar 文件。使用配置文件和 asm 插件这样做根本无法扩展。

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

Viel Erfolg und Gruß nach Düren

于 2011-08-06T01:11:52.523 回答