java - Maven Assembly 插件父描述符共享

标签 java xml maven

我有一个项目,有一个父模块。父级和子级都使用 maven-assemble-plugin。

父级使用它自己的描述符(zip.xml):

<?xml version="1.0" encoding="UTF-8"?>
<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>bin</id>
    <includeBaseDirectory>false</includeBaseDirectory>
    <formats>
        <format>zip</format>
    </formats>
    <fileSets>
        <fileSet>
            <directory>${svn.scripts}</directory>
            <includes>
                <include>query.*</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>${cfgreader.dist}</directory>
            <includes>
                <include>*.jar</include>
            </includes>
        </fileSet>
    </fileSets>
</assembly>

这样:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <descriptor>${basedir}/descriptors/zip.xml</descriptor>
                <finalName>${patch.prefix}_rev</finalName>
                <appendAssemblyId>false</appendAssemblyId>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

而我 child 的模块 pom.xml 有:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
            <archive>
                <manifest>
                    <mainClass>com.test.cfgReader</mainClass>
                </manifest>
            </archive>
            <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
            <finalName>cfgreader</finalName>
            <appendAssemblyId>false</appendAssemblyId>
        </configuration>
        <executions>
            <execution>
                <id>make-assembly</id>
                <phase>package</phase>
                <goals>
                    <goal>single</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

问题是子模块尝试使用 zip.xml 描述符并导致错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:2.
2-beta-5:single (make-assembly) on project dist: Error reading assemblies: Error
 locating assembly descriptor: D:\dist/descriptors/zip.xml
[ERROR]
[ERROR] [1] [INFO] Searching for file location: D:\dist\D\dist\D:\dist\descriptors\zip.xml
[ERROR]
[ERROR] [2] [INFO] File: D:\\dist\D:\\dist\descriptors\zip.xml does not exist.
[ERROR]
[ERROR] [3] [INFO] Invalid artifact specification: 'D:\\dist\D:\\dist\descriptors\zip.xml'. Must contain at le
ast three fields, separated by ':'.
[ERROR]
[ERROR] [4] [INFO] Failed to resolve classpath resource: assemblies/D:\dist/descriptors/zip.xml from
 classloader: ClassRealm[plugin>org.apache.maven.plugins:maven-assembly-plugin:2
.2-beta-5, parent: sun.misc.Launcher$AppClassLoader@33d626a4]
[ERROR]
[ERROR] [5] [INFO] Failed to resolve classpath resource: D:\dist/descriptors/zip.xml from classloade
r: ClassRealm[plugin>org.apache.maven.plugins:maven-assembly-plugin:2.2-beta-5,
parent: sun.misc.Launcher$AppClassLoader@33d626a4]
[ERROR]
[ERROR] [6] [INFO] File: D:\D\descriptors\zip.xml does not exist.
[ERROR]
[ERROR] [7] [INFO] Building URL from location: D:\dist/descriptors/zip.xml
[ERROR] Error:
[ERROR] java.net.MalformedURLException: unknown protocol: d
[ERROR] at java.net.URL.<init>(URL.java:592)
[ERROR] at java.net.URL.<init>(URL.java:482)
[ERROR] at java.net.URL.<init>(URL.java:431)
[ERROR] at org.apache.maven.shared.io.location.URLLocatorStrategy.resolve(URLLoc
atorStrategy.java:54)

.... 如果我从父 pom.xml 中删除 maven-assemble-plugin 一切都很好,如果我再次添加,父任务工作正常,而子任务失败。如何禁用描述符传播到 child ?

最佳答案

首先创建一个单独的模块,例如 mod- assembly ,并将 maven-assemble-plugin 的所有描述符和配置放入该模块中,并使此 mod- assembly 和您的父级的其他子级。除此之外,使用更新版本的 maven- assembly-plugin (2.4 而不是 2.2-beta-5)。

关于java - Maven Assembly 插件父描述符共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24392403/

相关文章:

java - 服务器签名声明 : REST Authentication without server side caching

java - 带接口(interface)的 EJB 依赖注入(inject)

javascript - 调整 Magento 中 page.xml 中包含的 js 脚本

Java 生成 xml 版本 1.1

spring-boot - Maven仅使用jar文件找不到依赖项

java - 谷歌地图,我没有找到设置的用户凭据

java - Heroku 上的 hibernate 搜索

java - ConcurrentModificationException 使用迭代器时出错 [.next()]

xml - htmlParse 无法加载外部实体

java - Sonar Lite 模式辅助类路径和 Ivy 依赖项