如何在jar中配置maven:assembly root path

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (222)

这是pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.springframework.webflow</groupId>
    <artifactId>spring-js-resources-thin</artifactId>
    <version>2.2.1.RELEASE</version>
    <name>Spring js lib</name>
    <description>Spring javascript library without dojo</description>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.2.1</version>
                <configuration>
                    <descriptors>
                        <descriptor>src/main/assembly/assembly.xml</descriptor>
                    </descriptors>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

这里是 assembly.xml

<assembly>
    <id>js-jar</id>
    <formats>
        <format>jar</format>
    </formats>
    <fileSets>
        <fileSet>
            <directory>src/main/resources/</directory>  
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>META-INF/**/*</include>
            </includes>
        </fileSet>
    </fileSets>
</assembly>

问题是,每次我打开生成的jar文件(spring-js-resources-thin-2.2.1.RELEASE -js-jar.jar)时,根文件夹总是被命名为artifactid-version(spring-js-resources-thin-2.2 .1.RELEASE),然后是META-INF。

我不知道有什么可以用文件名构建jar文件artifactid-version.jar,但是不需要artifactid-version在类路径中,就像maven仓库中的每个jar一样。我认为应该有一个选项或一种方式来命名<outputDirectory>

提问于
用户回答回答于

你必须告诉maven-assembly-plugin不要在存档中包含基本目录,这可以通过使用以下命令来实现:

<assembly>
    <id>js-jar</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <fileSets>
        <fileSet>
            <directory>src/main/resources/</directory>  
            <outputDirectory>.</outputDirectory>
            <includes>
                <include>META-INF/**/*</include>
            </includes>
        </fileSet>
    </fileSets>
</assembly>

关于使用maven-jar-plugin的建议非常好,因为它看起来有点像你滥用maven-assembly-plugin。

在maven-assembly-plugin的最新版本中,你应该将其.作为根文件夹。如果你使用/你会得到一个警告。

用户回答回答于

像这样将元素添加到程序集中。

<assembly>
    <id>js-jar</id>
    <formats>
        <format>jar</format>
    </formats>

    <baseDirectory>myBaseDir</baseDirectory>

    <fileSets>
        <fileSet>
            <directory>src/main/resources/</directory>  
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>META-INF/**/*</include>
            </includes>
        </fileSet>
    </fileSets>
</assembly>

如果<includeBaseDirectory>关闭,那么你的存档将不会有任何根目录。所以这取决于你想要什么。比如,我更喜欢我的zip文件,因为它有一个基本目录,所以如果你在解压缩之前忘了创建dir和cd,就不会意外地污染你的目录。更方便了。

扫码关注云+社区

领取腾讯云代金券