如何使用Maven将目录添加到JAR文件?

时间:2012-02-24 08:31:34

标签: java maven jar

我正在尝试使用Maven将Web应用程序打包为可运行的JAR文件。 jar-with-dependencies 程序集负责包含所有依赖项,但我仍然需要包含 src / main / webapp

我设法使用自定义程序集将目录添加到我的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">
    <id>webapp</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <fileSets>
        <fileSet>
            <directory>src/main/webapp</directory>
            <outputDirectory>/webapp</outputDirectory>
        </fileSet>
    </fileSets> 
</assembly>

它确实有效,甚至可以将此程序集与 jar-with-dependencies 一起使用。但是,最终的JAR包含webapp目录和所有依赖项,但不包含项目的类文件。我的装配显然正在移除它们。

我可以在程序集中保留自己项目的类文件吗?或者是否有另一种方法可以将目录添加到JAR中?

3 个答案:

答案 0 :(得分:5)

  

我的装配显然正在移除它们

我猜它是相反的,它是没有添加它们。

您的类文件位于目标/类中,它们需要进入target / webapp / WEB-INF / classes。我猜你需要另一个这样的规则:

<fileSet>
    <directory>target/classes</directory>
    <outputDirectory>/webapp/WEB-INF/classes</outputDirectory>
</fileSet>

答案 1 :(得分:1)

您的课程将在 $ {project.build.directory} / classes (/ target / classes)中生成。

因此,您应该将该文件夹用作源目录。

尝试将<directory>src/main/webapp</directory>更改为<directory>{project.build.directory}/classes</directory>

答案 2 :(得分:0)

或者,您可以在程序集描述符中添加以下内容。假设你的maven项目正在构建一个webapp,这不仅会处理类文件,还会处理webapp内容。

...
<dependencySets>
    <dependencySet>
        <useProjectArtifact>true</useProjectArtifact>
    </dependencySet>
</dependencySets>
...