【问题标题】:How to create a war and jar from a web project?如何从 Web 项目创建一个战争和 jar?
【发布时间】:2013-03-08 17:47:42
【问题描述】:

我有一个打包为“战争”的 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插件在jar中包含src/main/webapp的内容?

【问题讨论】:

  • 你需要这个罐子做什么,为什么战争不行? maven-jar-plugin 可能是错误的方式。
  • 这是一个常见的 Web 应用程序,它可以作为 servlet 包含在其他 Web 应用程序中,也可以作为战争本身独立部署。无论哪种方式,servlet 代码都可以工作。它为用户提供了在 web.xml 中使用 servlet 或将其用作 webapp 的灵活性。
  • 我认为maven jar插件不会包含与War项目相关的内容。它具有标准的文件夹结构,并且会遵守它。如果您想以任何所需格式打包,请使用程序集插件

标签: java maven


【解决方案1】:

通常Maven war:war 提供如下两个重要参数:-

1 archiveClasses

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

2attachClasses

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

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

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

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

通过使用Assembly Descriptors,您可以Filtering Some Distribution FilesIncluding and Excluding Artifacts 等等。这意味着您可以使用任何所需的内容/资源创建自己的存档。

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

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

usage page 将为您提供更多信息。

我希望这会有所帮助。

【讨论】:

  • 感谢您的建议。 'assembly-plugin' 提供了添加额外工件的最简单方法。我使用程序集插件从 wepapp 项目中生成了一个 war 和 jar。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2015-09-19
    • 2012-09-16
    • 1970-01-01
    • 2015-02-23
    • 2015-10-02
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多