如何从web项目创建war和jar文件?

4

我有一个Maven Web项目,打包方式是"war"。该包生成符合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"命令会生成一个包含类和'resources'文件夹内容的jar文件,而war文件则会生成一个合适的'war'文件。

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


你需要这个jar包做什么,为什么war不行?可能maven-jar-plugin不是正确的方式。 - Piotr Gwiazda
这是一个常见的Web应用程序,可以作为Servlet包含在其他Web应用程序中,也可以作为WAR文件独立部署。无论哪种方式,Servlet代码都能正常工作。它为用户提供了灵活性,可以将Servlet用于他们的web.xml文件中或将其用作Web应用程序。 - Nambi
我认为Maven Jar插件不会包含与War项目相关的内容。它具有标准文件夹结构,并将遵循该结构。如果您想以任何所需格式打包,请使用Assembly插件。 - Pranav Kevadiya
2个回答

2

使用Maven唯一干净的方法是将项目拆分为两个项目,一个用于构建jar文件,另一个用于构建war文件。(使用更简单的标准项目比使用一个非标准的大项目要好,特别是在使用Maven时)

现在,如果你还想共享src/main/webapp中的文件,你可以使用war覆盖(作为依赖项的war),或者使用类似Spring ServletDispatcher和它的mvc:resources标签的东西。


1

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

1 archiveClasses

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

2 attachClasses

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

即使 Maven War Plugin 提供了这个功能,但它并不包括 src/main/webapp 到创建的 jar 文件中。那么您可以考虑使用 Maven Asssembly Plugin

Maven 的 Assembly 插件 主要用于将项目输出与其依赖项、模块、站点文档和其他文件聚合到一个可分发的单一存档中。目前,它可以创建以下格式的分发:

  1. zip
  2. tar
  3. tar.gz
  4. tar.bz2
  5. jar
  6. dir
  7. war
  8. 以及任何已配置 ArchiveManager 的其他格式
通过使用组装描述符,您可以过滤某些分发文件包含和排除构件等。这意味着您可以创建自己所需的任何内容/资源的归档文件。
如果您想使用如您所述的Maven Jar插件。它还提供以下功能:
  1. 从jar构件中包含/排除内容
  2. 从项目创建额外的附加jar构件
  3. 等等。
使用页面将为您提供更多信息。
希望这可以帮助您。

感谢您的建议。'assembly-plugin' 提供了最简单的方法来添加额外的构件。我使用了 assembly 插件从 web 应用项目中生成了 war 和 jar 文件。 - Nambi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接