将 Java EE Web 应用程序导出为 JAR

第一天

这可能是一个奇怪的问题,但我对此很好奇:

我想创建一个 Java EE Web 项目,我可以将其打包成 JAR 文件(<packaging>jar</packaging>而不是<packaging>war</packaging>)。

换句话说,我想将 Java EE Web 服务器包含在 JAR(由 maven 构建)中。

在 WebServer 内部,我想使用 Servlet,就像我在将其打包到 WAR 文件时可以使用它们一样,但不需要执行 JAR 的设备安装 Web 服务器,以便它们可以部署我的 JAR。

我想要一个类似可执行 JAR 的东西,它包含服务器并运行它而无需安装其他东西。

是否有一个(理想的轻量级)服务器可以在 JAR 文件中工作,或者有任何其他可能性来创建这样的 JAR 文件?

高4x9r

如果你想使用 vanilla Java EE,你可以使用 Embedded Jetty Server 或 Embedded Tomcat Server:

以下是嵌入式 Tomcat 和 Maven 的示例:

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.company</groupId>
    <artifactId>app</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <packaging>jar</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>12</maven.compiler.source>
        <maven.compiler.target>12</maven.compiler.target>

        <servlet.version>3.1.0</servlet.version>
        <jsf.version>2.2.19</jsf.version>
        <tomcat.version>9.0.21</tomcat.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-api</artifactId>
            <version>${jsf.version}</version>
        </dependency>
        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-impl</artifactId>
            <version>${jsf.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-core</artifactId>
            <version>${tomcat.version}</version>
        </dependency>
       <dependency>
           <groupId>org.apache.tomcat</groupId>
           <artifactId>tomcat-jasper</artifactId>
           <version>${tomcat.version}</version>
      </dependency>
      <dependency>
           <groupId>org.apache.tomcat.embed</groupId>
           <artifactId>tomcat-embed-el</artifactId>
           <version>${tomcat.version}</version>
      </dependency>

  </dependencies>

    <build>
        <finalName>app</finalName>
        <resources>
            <resource>
                <directory>src/main/webapp</directory>
                <targetPath>META-INF/resources</targetPath>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>12</source>
                    <target>12</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <finalName>app-${project.version}</finalName>
                    <archive>
                        <manifest>
                            <mainClass>org.company.app.Application</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

主类:

package org.company.app;




import org.apache.catalina.WebResourceRoot;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.webresources.DirResourceSet;
import org.apache.catalina.webresources.StandardRoot;

import java.io.File;

public class Application {
    public static void main(final String[] args) throws Exception {

        final String webappPath = new File("src/main/webapp").getAbsolutePath();
        final Tomcat tomcat = new Tomcat();

        final StandardContext ctx = (StandardContext) tomcat.addWebapp("/", webappPath);
        System.out.println(ctx
        );
        // Declare an alternative location for your "WEB-INF/classes" dir
        // Servlet 3.0 annotation will work
        final String targetClassesPath = new File("target/classes").getAbsolutePath();
        final WebResourceRoot resources = new StandardRoot(ctx);
        resources.addPreResources(new DirResourceSet(//
                resources, "/WEB-INF/classes", //
                targetClassesPath, "/"));
        ctx.setResources(resources);

        tomcat.start();
        tomcat.getServer().await();
    }
}

剩下的照常java ee开发

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将Java EE Web应用程序部署到glassfish

来自分类Dev

我是否仍应该在Java EE6 +中为Web应用程序创建EJB JAR?

来自分类Dev

将Java应用程序导出到.jar

来自分类Dev

基本Java EE Web应用程序

来自分类Dev

为移动应用程序创建自定义API以访问您的Web应用程序(Java EE 6)

来自分类Dev

Java EE Web应用程序中的动态目录

来自分类Dev

Java EE Web应用程序和环境配置

来自分类Dev

Java ee Web应用程序中的Xform与Jsf

来自分类Dev

是否可以从Java EE Web应用程序访问AudioSystem?

来自分类Dev

如何将文件从表单复制到我的根Web应用程序Java EE中

来自分类Dev

将Java EE应用程序迁移到LDAP

来自分类Dev

将混合的Android应用程序与Web应用程序j2ee连接

来自分类Dev

将Java SE应用程序即服务与Java EE应用程序最佳实践集成

来自分类Dev

将 JMS 消息从 Java EE 应用程序发送到 Java SE 应用程序

来自分类Dev

Eclipse动态Web应用程序将jar文件放在WEB-INF / lib和Java Build Path中

来自分类Dev

Spring Boot将Web应用程序打包到.jar

来自分类Dev

Java EE 7 Web应用程序-将tika解析器升级到1.11后的REST-Services(json)问题

来自分类Dev

Tomcat:Web应用程序Java类文件/ jar位置

来自分类Dev

使用服务器端渲染将 Web 应用程序导出为 pdf

来自分类Dev

如何在Eclipse EE Luna中分析Java Web应用程序servlet调用

来自分类Dev

如何使用Vue和Java EE在Web应用程序中实现聊天系统?

来自分类Dev

最佳实践-Java EE Web应用程序中的Txt文件位置

来自分类Dev

如何为最终用户在Java EE Web应用程序上实施帮助?

来自分类Dev

IntelliJ中的Java EE应用程序和Web应用程序之间有什么区别?

来自分类Dev

如何将Log4j配置为使用Hibernate的Java Web应用程序?

来自分类Dev

使用Maven将Java EE应用程序部署到payara41 Docker容器

来自分类Dev

想使用java ee应用程序和ireport和barcode4j.jar打印条码

来自分类Dev

扩展Java EE应用程序的阶段

来自分类Dev

如何从Eclipse Java EE Web应用程序项目部署程序集中排除某些文件

Related 相关文章

  1. 1

    将Java EE Web应用程序部署到glassfish

  2. 2

    我是否仍应该在Java EE6 +中为Web应用程序创建EJB JAR?

  3. 3

    将Java应用程序导出到.jar

  4. 4

    基本Java EE Web应用程序

  5. 5

    为移动应用程序创建自定义API以访问您的Web应用程序(Java EE 6)

  6. 6

    Java EE Web应用程序中的动态目录

  7. 7

    Java EE Web应用程序和环境配置

  8. 8

    Java ee Web应用程序中的Xform与Jsf

  9. 9

    是否可以从Java EE Web应用程序访问AudioSystem?

  10. 10

    如何将文件从表单复制到我的根Web应用程序Java EE中

  11. 11

    将Java EE应用程序迁移到LDAP

  12. 12

    将混合的Android应用程序与Web应用程序j2ee连接

  13. 13

    将Java SE应用程序即服务与Java EE应用程序最佳实践集成

  14. 14

    将 JMS 消息从 Java EE 应用程序发送到 Java SE 应用程序

  15. 15

    Eclipse动态Web应用程序将jar文件放在WEB-INF / lib和Java Build Path中

  16. 16

    Spring Boot将Web应用程序打包到.jar

  17. 17

    Java EE 7 Web应用程序-将tika解析器升级到1.11后的REST-Services(json)问题

  18. 18

    Tomcat:Web应用程序Java类文件/ jar位置

  19. 19

    使用服务器端渲染将 Web 应用程序导出为 pdf

  20. 20

    如何在Eclipse EE Luna中分析Java Web应用程序servlet调用

  21. 21

    如何使用Vue和Java EE在Web应用程序中实现聊天系统?

  22. 22

    最佳实践-Java EE Web应用程序中的Txt文件位置

  23. 23

    如何为最终用户在Java EE Web应用程序上实施帮助?

  24. 24

    IntelliJ中的Java EE应用程序和Web应用程序之间有什么区别?

  25. 25

    如何将Log4j配置为使用Hibernate的Java Web应用程序?

  26. 26

    使用Maven将Java EE应用程序部署到payara41 Docker容器

  27. 27

    想使用java ee应用程序和ireport和barcode4j.jar打印条码

  28. 28

    扩展Java EE应用程序的阶段

  29. 29

    如何从Eclipse Java EE Web应用程序项目部署程序集中排除某些文件

热门标签

归档