jar包和war包区别,标准 Java 应用程序和 Java Web 应用程序区别
标准 Java 应用程序和 Java Web 应用程序在用途、结构和运行环境上有一些显著的区别。以下是它们的详细比较:
标准 Java 应用程序
定义
- 标准 Java 应用程序:通常指在独立的 Java 虚拟机(JVM)上运行的应用程序,不依赖于任何特定的服务器环境。它们通常是命令行应用程序或桌面 GUI 应用程序。
特点
- 运行环境:独立运行在任意支持 JVM 的平台上,通常通过
java -jar
命令启动。 - 构建输出:通常打包为 JAR(Java ARchive)文件,包含类文件、资源文件和
META-INF
目录。 - 结构简单:主要包含
src/main/java
和src/main/resources
目录,用于存放源代码和资源文件。 - 用途:用于桌面应用程序、命令行工具、独立的业务逻辑模块等。
示例项目结构
myapp/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ ├── MainClass.java
│ │ │ └── AnotherClass.java
│ │ └── resources/
│ │ └── config.properties
├── pom.xml
示例 pom.xml
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>myapp</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.example.MainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>
Java Web 应用程序
定义
- Java Web 应用程序:运行在 Web 服务器(如 Apache Tomcat、Jetty)或应用服务器(如 JBoss、WebLogic)上的应用程序,通常提供动态网页和 Web 服务。
特点
- 运行环境:部署在 Web 服务器或应用服务器上,通过 HTTP/HTTPS 协议提供服务。
- 构建输出:通常打包为 WAR(Web ARchive)文件,包含 Web 组件(如 JSP、Servlet)、静态资源(HTML、CSS、JavaScript)、类文件、库文件(JAR)和配置文件。
- 结构复杂:包括
src/main/webapp
目录,用于存放 Web 相关资源和WEB-INF
目录。 - 用途:用于动态网站、Web 服务、Web 应用程序等。
示例项目结构
mywebapp/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ ├── MyServlet.java
│ │ │ └── AnotherClass.java
│ │ ├── resources/
│ │ ├── webapp/
│ │ │ ├── WEB-INF/
│ │ │ │ └── web.xml
│ │ │ ├── index.jsp
│ │ │ └── static/
│ │ │ ├── css/
│ │ │ │ └── style.css
│ │ │ ├── js/
│ │ │ │ └── script.js
│ │ │ └── images/
│ │ │ └── logo.png
├── pom.xml
示例 pom.xml
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>mywebapp</artifactId>
<version>1.0.0</version>
<packaging>war</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.1</version>
<configuration>
<webXml>src/main/webapp/WEB-INF/web.xml</webXml>
</configuration>
</plugin>
</plugins>
</build>
</project>
共同点
- Java 技术栈:两者都基于 Java 编程语言和 JVM,使用相同的编程语言、库和工具。
- Maven 构建工具:两者都可以使用 Maven 进行构建和管理依赖,使用类似的
pom.xml
配置文件。 - 依赖管理:两者都依赖于
pom.xml
文件进行依赖管理,可以使用相同的库和插件。
archiveArtifacts
在 Jenkins 中的作用
archiveArtifacts
是 Jenkins Pipeline 中用于存档构建生成的工件(如 JAR 文件、WAR 文件、日志文件等)的步骤。它使这些工件可以在 Jenkins 的 UI 中查看和下载,确保构建成果的保存和可追溯性。
示例
假设你在 Jenkins 中构建一个 Maven 项目,生成了一个 JAR 文件或 WAR 文件,并希望将其存档。可以在 Jenkinsfile 中使用 archiveArtifacts
进行存档。
JAR 包存档示例:
pipeline {
agent any
stages {
stage('Build') {
steps {
// 使用 Maven 构建 JAR 包
sh 'mvn clean package'
}
}
stage('Archive') {
steps {
// 将构建生成的 JAR 包存档
archiveArtifacts artifacts: 'target/*.jar', fingerprint: true
}
}
}
}
WAR 包存档示例:
pipeline {
agent any
stages {
stage('Build') {
steps {
// 使用 Maven 构建 WAR 包
sh 'mvn clean package'
}
}
stage('Archive') {
steps {
// 将构建生成的 WAR 包存档
archiveArtifacts artifacts: 'target/*.war', fingerprint: true
}
}
}
}
总结
- 标准 Java 应用程序:独立运行,适用于桌面和命令行应用,通常打包为 JAR 文件。
- Java Web 应用程序:运行在 Web 服务器或应用服务器上,提供 Web 服务,通常打包为 WAR 文件。
- 共同点:两者都使用 Java 技术栈和 Maven 构建工具,具有相同的依赖管理机制。
archiveArtifacts
:用于在 Jenkins 中存档构建生成的工件,确保构建成果的保存和可追溯性。
通过了解这些区别和联系,可以更好地在不同的应用场景中选择合适的项目结构和构建方式。