如何在JAR中包含静态文件

2022-07-11 00:00:00 ant java maven pom.xml

我有一个ant构建,它只生成一个装满html页面的JAR。我也想用maven做同样的事情。我目前正在将文件复制到一个新文件夹中,但这些文件并没有添加到最终的JAR中。当我运行命令
jar tf mavenjar.jar
我没有看到我的终端中列出的文件。看起来是这样的: click here
当我在Ant生成的JAR上运行相同的命令时,我看到以下内容: click here 这是我的POM

<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>try1</groupId>
    <artifactId>try1</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
            </plugin>
        </plugins>
        <finalName>mavenjar</finalName>
        <resources>
            <resource>
                <directory>${basedir}/moveTheseFiles</directory>
                <targetPath>${basedir}/newFileLocation</targetPath>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>
</project>


您知道要将移动到JAR的文件包括在内可能会遗漏什么内容吗?


解决方案

有两种方法可以实现这一点。遵循有关配置的约定-或对其进行配置。

约定重于配置

将静态文件复制到JAR中的最简单方法是使用默认文件夹。您在那里添加的所有文件都将添加到您的JAR文件中。您的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>try1</groupId>
    <artifactId>try1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <build>
        <finalName>mavenjar</finalName>
    </build>
</project>

非默认文件夹

当您确实需要将文件放在另一个文件夹中时,您的配置几乎是正确的。只缺少includes部分。您必须告诉Maven包含指定文件夹中的所有文件。

<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>try1</groupId>
    <artifactId>try1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <build>
        <finalName>mavenjar</finalName>
        <resources>
            <resource>
                <directory>moveTheseFiles</directory>
                <includes>
                    <include>**/*</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>
</project>

注意:您似乎要创建一个Web应用程序。也许您想创建一个war文件。要实现这一点,您只需设置

<packaging>war</packaging>

在pom.xml中。然后是所有网络资源(HTMLPages、CSS...)应位于src/main/webapp下,并将被复制到WAR的根文件夹中。请注意,src/main/resources中的文件将被复制到生成的WAR中的WEB-INF/classes

相关文章