Maven 2程序集插件破坏了一些META-INF文件

Moj*_*ojo 10 java spring maven-2

我正在使用Maven 2程序集插件来构建jar-with-dependencies并创建一个可执行的JAR文件.我的程序集包括Spring和CXF库.

CXF包含META-INF文件spring.schemas和spring.handlers的副本,最终破坏了spring-2.5.4 jar中的类似文件.

手动,我可以在jar-with-dependencies中更新这两个文件.

我正在寻找的是Maven POM中的一些方法来指导程序集插件以获取这两个文件的正确版本.

程序集插件文档讨论了文件筛选,但似乎没有配置或参数,没有遇到创建自定义程序集描述符的麻烦.

在这种情况下,制作自定义汇编描述符是我唯一的希望吗?

mag*_*air 7

出于某种原因,Mojo和其他人建议的解决方案仍然不适合我.我已经创建了我的自定义spring.handlersspring.schemas文件并将它们放在下面src/main/resources/META-INF.但是,使用unpackOptions我的文件时也不包括在内.当我不使用unpackOptions我的文件不是jar中的文件.

我最终做的是直接引用文件.这最终把我的文件放到了JAR中.

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
    <!-- TODO: a jarjar format would be better -->
    <id>jar-with-dependencies</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <outputDirectory>/</outputDirectory>
            <unpack>true</unpack>
            <unpackOptions>
                <excludes>
                    <exclude>META-INF/spring.handlers</exclude>
                    <exclude>META-INF/spring.schemas</exclude>
                </excludes>
            </unpackOptions>
            <scope>runtime</scope>
        </dependencySet>
    </dependencySets>
    <files>
        <file>
            <source>${project.basedir}/src/main/resources/META-INF/spring.handlers</source>
            <outputDirectory>META-INF</outputDirectory>
        </file>
        <file>
            <source>${project.basedir}/src/main/resources/META-INF/spring.schemas</source>
            <outputDirectory>META-INF</outputDirectory>
        </file>
    </files>
</assembly>
Run Code Online (Sandbox Code Playgroud)


Dan*_*ulp 5

我建议使用maven-shade-plugin代替.如果您查看cxf-bundle的pom(http://svn.apache.org/repos/asf/cxf/trunk/distribution/bundle/all/pom.xml),您可以看到如何使用阴影变换器合并spring.schemas和其他必要的文件.


小智 5

我尝试了阴影插件方法,它工作得非常好.以下是您需要放入POM的所有内容(无需组装插件).

      <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>1.4</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>org.example.Runner</mainClass>
                            </transformer>
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                <resource>META-INF/spring.handlers</resource>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
Run Code Online (Sandbox Code Playgroud)