Java maven汇编插件Windows vs Linux

Java maven汇编插件Windows vs Linux,java,maven,maven-assembly-plugin,Java,Maven,Maven Assembly Plugin,我有一个使用maven assembly插件的项目,我看到在Linux和Windows上构建时的行为有所不同。在每个平台上使用完全相同的pom.xml和assembly.xml 窗口: mvn日志记录如下所示: [INFO] --- maven-jar-plugin:3.1.0:jar (default-jar) @ foo --- [INFO] Building jar: C:\foo\target\foo.jar [INFO] [INFO] --- maven-assembly-plugin

我有一个使用maven assembly插件的项目,我看到在Linux和Windows上构建时的行为有所不同。在每个平台上使用完全相同的pom.xml和assembly.xml

窗口:

mvn日志记录如下所示:

[INFO] --- maven-jar-plugin:3.1.0:jar (default-jar) @ foo ---
[INFO] Building jar: C:\foo\target\foo.jar
[INFO]
[INFO] --- maven-assembly-plugin:3.1.0:single (default) @ foo ---
[INFO] Reading assembly descriptor: assembly.xml
[INFO] Copying files to C:\foo\target\foo
[WARNING] Assembly file: C:\foo\target\foo is not a regular file (it may be a directory). It cannot be attached to the project build for installation or deployment.
[INFO] --- maven-jar-plugin:3.1.0:jar (default-jar) @ foo ---
[INFO] Building jar: /home/<user>/foo/target/foo.jar
[INFO] 
[INFO] --- maven-assembly-plugin:3.1.0:single (default) @ foo ---
[INFO] Reading assembly descriptor: assembly.xml
[INFO] Copying files to /home/<user>/foo/target/foo-1.0.0001
[WARNING] Assembly file: /home/<user>/foo/target/foo-1.0.0001 is not a regular file (it may be a directory). It cannot be attached to the project build for installation or deployment.
在目标目录中,我观察到一个目录C:\foo\target\foo,其中包含项目的所有依赖JAR

Linux:

mvn日志记录如下所示:

[INFO] --- maven-jar-plugin:3.1.0:jar (default-jar) @ foo ---
[INFO] Building jar: C:\foo\target\foo.jar
[INFO]
[INFO] --- maven-assembly-plugin:3.1.0:single (default) @ foo ---
[INFO] Reading assembly descriptor: assembly.xml
[INFO] Copying files to C:\foo\target\foo
[WARNING] Assembly file: C:\foo\target\foo is not a regular file (it may be a directory). It cannot be attached to the project build for installation or deployment.
[INFO] --- maven-jar-plugin:3.1.0:jar (default-jar) @ foo ---
[INFO] Building jar: /home/<user>/foo/target/foo.jar
[INFO] 
[INFO] --- maven-assembly-plugin:3.1.0:single (default) @ foo ---
[INFO] Reading assembly descriptor: assembly.xml
[INFO] Copying files to /home/<user>/foo/target/foo-1.0.0001
[WARNING] Assembly file: /home/<user>/foo/target/foo-1.0.0001 is not a regular file (it may be a directory). It cannot be attached to the project build for installation or deployment.
[INFO]——maven jar插件:3.1.0:jar(默认jar)@foo---
[INFO]构建jar:/home//foo/target/foo.jar
[信息]
[信息]---maven汇编插件:3.1.0:single(默认)@foo---
[信息]正在读取程序集描述符:assembly.xml
[信息]将文件复制到/home//foo/target/foo-1.0.0001
[警告]程序集文件:/home//foo/target/foo-1.0.0001不是常规文件(可能是目录)。无法将其附加到项目生成以进行安装或部署。
但是在目标目录中没有目录target/foo(也没有目录target/foo-1.0.001)

我应该注意到一个下游项目期望target/foo目录存在,这就是为什么我要研究Windows和Linux之间的行为差异

这是我的pom中的插件定义:

            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <appendAssemblyId>false</appendAssemblyId>
                            <descriptors>
                                <descriptor>assembly.xml</descriptor>
                            </descriptors>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

maven汇编插件
包裹
单一的
假的
assembly.xml
这是程序集描述符:

<assembly
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/3.1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/3.1.0 http://maven.apache.org/xsd/assembly-3.1.0.xsd">
    <id>tar</id>
    <formats>
        <format>dir</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>

    <files>
        <file>
            <source>${project.build.directory}/${project.artifactId}.jar</source>
            <outputDirectory>./</outputDirectory>
        </file>
    </files>

    <dependencySets>
        <dependencySet>
            <unpack>false</unpack>
            <excludes>
                <exclude>${artifact}</exclude>
            </excludes>
        </dependencySet>
    </dependencySets>
</assembly>

焦油
迪尔
假的
${project.build.directory}/${project.artifactId}.jar
./
假的
${artifact}
我尝试过在
\
\
部分修补finalName,但都没有用,我还尝试过该插件的最新版本


为什么在Windows上构建时会给我目标\foo目录和中的依赖项,而在Linux上构建后,我看不到等效目录?

您是否尝试过像这样指定确切的outputDirectory
目标/assembly/out
我在我的项目中使用它,效果很好,从未体验过您所说的内容