是否可以打包成单个war?

Is it possible to package into single war?

我完成了 Web 应用程序的开发,现在在打包后我在输出路径中得到以下结构:

是否可以将所有这些文件夹和文件打包到一个war文件中(就像开发人员使用uber-jarfat-jar)? 我的意思是,由于 maven-package 目标,我只想在目标文件夹中有一个 单个 war 文件。

我还希望我的单个 war 文件 可执行(双击),如果可能的话。

我认为您只是不理解 .war 打包的主要思想。您应该将其视为与外界没有任何关系的独立模块。因此,您可以在不同的系统和不同的 Web 容器上使用它(正如评论中提到的,它们是 JBossGlassFish, WebSphere).

所有这些带来了以下advantages

  • 轻松测试和部署 Web 应用程序;
  • 轻松识别已部署应用程序的版本;
  • 所有 Java EE 容器支持 WAR 个文件;
  • MVC 结构也支持 WAR 个文件。

我不明白为什么要将整个目标目录制作成单个 war 文件。

1) Is it possible to package all these folders and files into a single war file (like developers do it with uber-jar or fat-jar)? I mean I just want a single war file in target folder as result of maven-package goal.

如有需要,修改pom.xml中的maven-package阶段配置,将所有files/directories添加到WebARchive中自行打包(WAR) .

但是您不需要 directories/files( 除了包含必要的 类、库和资源 的 WAR 文件)在执行 maven 包阶段后,目标目录不再存在。如果是这样,则在项目的 pom 文件中添加以下 maven 代码段 并根据需要修改配置部分。

maven-snippet

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-antrun-plugin</artifactId>
  <version>1.8</version>
  <executions>
   <execution>
     <id>id.post-clean</id>
     <phase>post-clean</phase>
     <goals>
        <goal>run</goal>
     </goals>
     <configuration>
        <target>
          <delete 
            dir="${project.build.outputDirectory}/dir-to-be-deleted"
            includeemptydirs="true"/>
        </target>
     </configuration>
   </execution>
  </executions>
</plugin>

2) I also want my single war file being executable (on double-click), if it is possible.

是的,这是可能的。在此之前,您应该知道,WAR 文件旨在将应用程序包装为 Web 容器的存档,例如 Tomcat、Glassfish、Weblogic、JBoss 等,它应该被部署通过这样的容器以方便访问和配置应用程序以避免运行时出现意外结果。

通过嵌入上述任何一个容器和满足您需要的套件,使 WAR 文件可执行。但它不应该完全像 windows 或可执行 jar 的行为。

首先,应该通过cli 中的java 命令调用war 文件,然后通过网络浏览器或任何http 客户端访问应用程序。

Here 是一篇很棒的文章,它提供了将 apache tomcat 应用程序服务器嵌入到 java 应用程序的指导。

希望这可以帮助您实现目标。