浅谈maven的jar包和war包区别 以及打包方法

下面就是关于“浅谈maven的jar包和war包区别 以及打包方法”的完整攻略。

什么是Maven

Maven是一个Java项目的自动化构建工具,可以帮助我们自动化地完成项目构建、打包、依赖管理等工作。

jar包和war包的区别

Maven中的jar包和war包是两种不同的打包方式。jar包是Java程序的一种标准的JAR文件格式,一般用于打包Java类库、工具类等。war包是Web应用程序的一种标准的WAR文件格式,一般用于打包Web项目,包含了Web应用程序的所有资源文件、配置文件、类文件等。

更具体的区别可以从以下几个方面来说明:

  • 目录结构:jar包只包含Java类文件,打包后只有class文件和一些资源文件;war包则包含Web应用程序的所有组件,包括Web.xml等配置文件、JSP文件、Servlet类文件、HTML文件、JS文件、CSS文件以及图片等各种资源文件;
  • 打包方式:jar包不需要依赖Servlet容器即可运行,而war包需要部署在Servlet容器中才能运行;
  • 运行方式:jar包一般作为Java应用程序的运行环境,通过java -cp命令启动,而war包一般通过Servlet容器启动,如Tomcat、Jetty等。

Maven打包方式

Maven可以通过以下两种方式来打包jar包和war包。

命令行方式

使用命令行方式打包,需要在项目根目录下执行以下命令:

  • 打包jar包:mvn package
  • 打包war包:mvn package -Dmaven.war.packaging.excludes=log4j.dtd -Dmaven.war.packaging.excludes=log4j.xml

其中,第二个命令中的两个"-D"参数,是为了解决打包时排除掉log4j.dtd和log4j.xml文件报错的问题。

pom.xml配置方式

除了通过命令行方式,我们还可以在pom.xml文件中配置Maven的打包方式。具体配置如下:

<packaging>jar</packaging>  <!--打包为jar-->
<packaging>war</packaging>  <!--打包为war-->

示例代码

下面是两个示例,分别演示如何打包jar包和war包。

示例1:打包jar包

项目结构如下:

project
|--src
|  |--main
|  |  |--java
|  |     |--com
|  |        |--example
|  |           |--Demo.java
|  |--test
|--pom.xml

Demo.java源代码如下:

package com.example;

public class Demo {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

我们需要将这个项目打包成jar包,可以在项目根目录下执行以下命令:

mvn package

打包成功后,将生成一个target目录,其中包含了一个名为project-1.0-SNAPSHOT.jar的jar包文件,可以通过以下命令来运行:

java -cp target/project-1.0-SNAPSHOT.jar com.example.Demo

示例2:打包war包

项目结构如下:

web-project
|--src
|  |--main
|  |  |--java
|  |     |--com
|  |        |--example
|  |           |--HelloServlet.java
|  |  |--webapp
|  |     |--WEB-INF
|  |        |--web.xml
|  |  |  |--index.jsp
|--pom.xml

HelloServlet.java源代码如下:

package com.example;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public HelloServlet() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().append("Hello, World!");
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

web.xml文件的内容如下:

<web-app>
  <display-name>Web App</display-name>

  <servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>com.example.HelloServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

我们需要将这个项目打包成war包,可以在项目根目录下执行以下命令:

mvn package -Dmaven.war.packaging.excludes=log4j.dtd -Dmaven.war.packaging.excludes=log4j.xml

打包成功后,将生成一个target目录,其中包含了一个名为web-project-1.0-SNAPSHOT.war的war包文件,可以将这个war包文件部署到Tomcat等Servlet容器中运行。

总结

通过以上的讲解,我们可以知道jar包和war包的区别以及Maven打包方式。不同的打包方式适用于不同的应用场景,在实际开发中需要选用合适的打包方式来完成应用的部署和运行。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈maven的jar包和war包区别 以及打包方法 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • java与scala数组及集合的基本操作对比

    Java与Scala数组及集合的基本操作可以进行如下对比: 数组 Java数组 Java中的数组是一个固定大小的容器,用来存储相同类型的元素。数组的大小在创建时是固定的,无法修改。 创建数组 Java中创建数组需要指定数组的类型和大小。如下所示,创建一个包含5个int类型元素的数组: int[] myArray = new int[5]; 插入/获取元素 J…

    Java 2023年5月26日
    00
  • java中读写Properties属性文件公用方法详解

    Java中读写Properties属性文件公用方法详解 什么是Properties属性文件? Properties属性文件是Java中常用的一种配置文件,使用键值对的形式来保存配置数据。通常我们将应用程序中需要用户自行配置的数据以及程序运行时需要用到的配置数据都存储在Properties属性文件中进行统一管理。这种文件通常采用.properties扩展名。 …

    Java 2023年6月15日
    00
  • springboot集成Mybatis的详细教程

    SpringBoot 是一个非常流行的Java Web框架,与 Mybatis 结合使用可以快速地实现数据操作和服务构建。下面将为你提供 SpringBoot 集成 Mybatis 的详细教程。 准备工作 在开始之前,请确保已经完成以下准备工作: 搭建好了 Java 开发环境,并确保已经安装了 Maven。 创建一个 SpringBoot 项目。 添加依赖 …

    Java 2023年5月19日
    00
  • 图片路径中含有中文在jsp下不能正常显示的原因及解决

    当图片路径中含有中文字符时,若在jsp页面中直接引用该路径,可能导致图片无法正常显示。这是因为URL是英文字符编码的,中文字符在URL中必须进行编码,如果不编码,就出现了上述问题。 为了解决这个问题,我们可以采取以下两种方法: 1. 对中文字符进行编码 使用URLEncoder对包含中文字符的字符串进行编码,然后将编码后的字符串作为图片路径。示例代码如下: …

    Java 2023年6月15日
    00
  • Java实现有限状态机的推荐方案分享

    Java 实现有限状态机的推荐方案分享 有限状态机(Finite State Machine,FSM)是一种计算模型,它可以使用有限个状态和它们之间的转移,来描述一个系统在不同状态下的行为。在软件开发中,常常需要使用有限状态机来解决复杂问题,比如网络协议解析、报文处理、游戏逻辑等。 本文将介绍 Java 实现有限状态机的一些推荐方案,并提供了两条示例说明,供…

    Java 2023年5月26日
    00
  • Security 登录认证流程详细分析详解

    下面是关于“Security 登录认证流程详细分析详解”的完整攻略。 背景 对于安全性要求较高的网站,通常需要用户进行身份认证才能访问特定功能或资源。本文将详细分析常见的登录认证流程,以及如何使用Spring Security实现这些流程。 登录认证流程 通常的登录认证流程可分为以下几步: 用户在前端页面输入用户名和密码,并提交表单。 服务器接收到表单数据后…

    Java 2023年5月20日
    00
  • 关于Java for循环的正确用法介绍

    关于Java for循环的正确用法介绍 循环是Java中非常重要的一种语句。for循环是循环语句中最为常用和灵活的一种,它可以重复执行一段代码,在Java语言中,for循环的语法格式如下: for (初始化表达式; 布尔表达式; 更新表达式) { // 循环体 } 初始化表达式:初始化表达式在循环开始前执行,而且只会执行一次。这里我们一般做循环变量的初始化操…

    Java 2023年5月26日
    00
  • Spring Security 自动踢掉前一个登录用户的实现代码

    当一个用户已经登录了系统,但是另一个用户使用相同的账号登录时,为了安全起见,一般需要自动踢掉前一个用户。Spring Security 为开发者提供了一些较为方便且易于理解的方式来实现这个功能。 基于SessionRegistry来实现 Spring Security提供了SessionRegistry来帮助我们管理用户的Session,我们可以使用这个类来…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部