如何使用命令行创建 WAR 文件?

Posted

技术标签:

【中文标题】如何使用命令行创建 WAR 文件?【英文标题】:How to create a WAR file using the commandline? 【发布时间】:2015-05-28 12:40:00 【问题描述】:

我安装了 JBoss Developer Studio,可以通过“鼠标右键项目 > 导出 > WAR 文件”创建 WAR 文件,但我想使用命令行将我的项目导出到 WAR 文件。

我安装了 maven,这是 Studio 的要求之一,我读到我可以使用 maven 生成 WAR 文件,但我需要一个名为 pom.xml 的文件。当我搜索我的工作区和项目时,pom.xml 丢失了。我可能需要手动创建 pom.xml,但我不确定如何。

我的项目的目录树如下:

Siesta
├── build
│   └── classes
├── src
└── WebContent
    ├── extjs
    ├── extjs-4.2.0
    ├── extjs-4.2.2
    ├── index.jsp
    ├── META-INF
    ├── siesta
    ├── tests
    └── WEB-INF

如何使用命令行为我的 Maven / JBoss 项目创建 WAR 文件?我使用 Linux 并且不希望创建 pom.xml 文件,但如果没有其他方法,那么我将使用 xml 文件来生成 war 文件。

编辑:

所以 jar 是创建 war 文件的方法。我编写了一个小脚本,它将为我创建一个特定目录的战争文件。

#!/bin/bash
cd Siesta/WebContent/
jar -cvf ../../Siesta.war *
cd -

然后,如果您在 ubuntu 的 zip 实用程序或存档管理器中打开 war 文件,您将看到此结构

    ├── extjs
    ├── extjs-4.2.0
    ├── extjs-4.2.2
    ├── index.jsp
    ├── META-INF
    ├── siesta
    ├── tests
    └── WEB-INF

我必须 CD 到我想要创建一个有点烦人的 war 文件的目录。我认为使用 jar 的 -C 选项可能有更好的方法,但是当我使用“jar -cvf Siesta.war -C Siesta/WebContent *”时,结果不一样。

编辑2:

jar -cvf my-app.war myfolder/

为了让我的应用程序在 TomCat 上运行,我使用以下内容:

cd Siesta/WebContent
jar -cvf Siesta.war *

【问题讨论】:

【参考方案1】:

好吧,这里有一个已经存在的 SO,其中有几个关于如何创建战争文件的可能性:How to create war files。

我个人更喜欢 Maven,而不是任何其他构建方案 - 自从我从 ANT 迁移以来,我一开始并不喜欢 Maven,但在文档中投入了一两天之后:http://maven.apache.org/pom.html 我开始喜欢它。在您的情况下,您所需要的只是重构您的项目以满足 Maven 标准文件结构,并为您的源创建一个最小的 Maven 项目(又名pom.xml 文件),该项目具有包装war 而不是默认的jar

如果您只想坚持使用控制台并且不使用除 JDK 提供的构建助手之外的任何构建助手,您可以使用以下方式创建您的战争:

jar cvf my-app.war

看看这个:https://docs.oracle.com/javase/tutorial/deployment/jar/build.html 以获得支持选项的完整参考。

(注意:基于 java 的 Web 应用程序上下文中的“war”遵循标准格式:http://docs.oracle.com/javaee/6/tutorial/doc/bnaby.html,而技术“.war”文件与重命名为“.zip”的 ZIP 压缩文件夹相同。 )

(另外请注意,我真的会花时间与 maven 取得联系,因为在那之后您知道了一个严肃的构建工具,并且将能够在标准中创建 jarearwar 等过程)。

【讨论】:

很有趣,所以您认为使用“jar cvf my-app.war”将创建我的 .war 文件,或者如果 TomCat 只需要一个 .war zip 文件,那么我需要做的就是 zip目录的内容。让我试试看。 @SomeGuyOnAComputer 老实说,我还没有测试过 jar 工具。但是是的,如果您遵循 WAR 目录布局并且在该结构中有一个工作的 Web 应用程序(可能是 /WEB-INF/ 中的单个 index.html 文件),您可以压缩该文件夹并将生成的 ZIP 重命名为 WAR 并将其部署在你本地的Tomcat 我尝试了 zip 方法,但不幸的是,它不起作用。然而,***.com/questions/16342075/… 使用的正是你放在“jar -cvf my-app.war myfolder/”上方的内容,这就成功了!【参考方案2】:

如果这是一个 Maven 项目,则打开您的控制台,导航到 pom.xml 文件所在的位置,然后运行:

mvn package

它将在 $basedir/target 目录下创建 artifactId-version.war 文件。这假定您的 packaging POM 元素在您的 pom.xml 文件中设置为 war

<project ...>
    ...
    <packaging>war</packaging>
    ...
</project>

一些有效的包装值是 jarwarearpom。如果没有指定包装值,则默认为jar

更多详情here 和here。

【讨论】:

使用所有这些选项:验证、初始化、生成源、流程源、生成资源、流程资源、编译、流程类、生成测试源、流程测试源, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install , deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy ...包是我想要的,谢谢!【参考方案3】:

最简单的选择(如果您使用 Maven)是使用 maven-archetype-webapp 创建它:

 mvn archetype:generate -DgroupId=com.sample -DartifactId=web-project -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

然后您可以优化您的 pom.xml 以包含所需的依赖项,例如:

<dependency>
    <groupId>jakarta.platform</groupId>
    <artifactId>jakarta.jakartaee-api</artifactId>
    <version>8.0.0</version>
    <scope>provided</scope>
</dependency>

来源:How to create a Web application from the Command Line

【讨论】:

以上是关于如何使用命令行创建 WAR 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何从命令行运行 WAR 中的类?

如何使用 grails 命令行编译 grails 项目?

如何创建战争文件

如何将我的 .war 文件复制到 AWS 上的 EC2 实例?

如何创建角度项目的war文件?

如何使用maven创建.war文件?