4

我有一个打包为“战争”的 Maven 网络项目。该包生成确认为war格式的war文件。但是,我喜欢将项目打包为“jar”以及默认的“war”格式。所以,我正在尝试使用“maven jar”插件来实现这一点。我正在使用以下 jar 插件配置。

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <executions>
                <execution>
                    <id>make-a-jar</id>
                    <phase>package</phase>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <classesDirectory>${project.build.outputDirectory}</classesDirectory>
                <includes>
                    <include>../../src/main/webapp/**</include>
                    <include>**/*</include>
                </includes>
            </configuration>
        </plugin>

“package”命令生成一个 jar 文件,其中包含类和“resources”文件夹的内容,war 文件生成一个正确的“war”文件。

但是 'src/main/webapp' 的内容不包含在 jar 文件中。如何使用 jar 插件将 src/main/webapp 的内容包含在 jar 中?

4

2 回答 2

2

使用 Maven 做到这一点的唯一干净方法是将项目分成两个项目,一个用于构建 jar,一个用于构建战争。(更简单的标准项目比一个大的非标准项目更好,尤其是 Maven)

现在,如果您还想共享 src/main/webapp 中的文件,您可以使用 war 覆盖(war 作为依赖项),或者使用类似 spring servletDispatcher 及其 mvc:resources 标记的东西。

于 2013-03-20T08:57:54.683 回答
1

通常Maven war:war提供 2 个重要参数,如下所示:-

1archiveClasses

是否将为 webapp 中的类创建 JAR 文件。使用此可选配置参数将使编译的类 归档到 JAR 文件中,然后将类目录从 webapp 中排除默认值为:假。 用户属性是:archiveClasses。

2attachClasses

类(即 WEB-INF/classes 目录的内容)是否应作为附加工件附加到项目中。默认情况下,附加工件的分类器是“类”。您可以使用参数更改它<classesClassifier>someclassifier</classesClassifier>

即使这是提供Maven War Plugin的功能,也不包括src/main/webapp创建的 jar 文件。然后你可以考虑Maven Asssembly Plugin

用于 Maven 的程序集插件 主要旨在允许用户将项目输出及其依赖项、模块、站点文档和其他文件聚合到一个可分发的存档中。目前它可以创建以下格式的发行版:

  1. 压缩
  2. 柏油
  3. 压缩包
  4. tar.bz2
  5. 目录
  6. 战争
  7. 以及已为 ArchiveManager 配置的任何其他格式

通过使用程序集描述符,您可以过滤一些分发文件以及 包含和排除工件等。这意味着您可以使用任何所需的内容/资源创建自己的存档。

如果您想使用前面提到的Maven Jar 插件。它还提供以下内容:-

  1. 从 jar 工件中包含/排除内容
  2. 从项目创建附加的 jar 工件
  3. 等等

使用页面将为您提供更多信息。

我希望这可能会有所帮助。

于 2013-03-20T00:46:58.160 回答