`

maven: 打包可运行的jar包(java application)及依赖项处理

    博客分类:
  • Java
 
阅读更多

IDE环境中,可以直接用exec-maven-plugin插件来运行java application,类似下面这样:

复制代码
 1 <plugin>
 2     <groupId>org.codehaus.mojo</groupId>
 3     <artifactId>exec-maven-plugin</artifactId>
 4     <version>1.2.1</version>
 5     <executions>
 6         <execution>
 7             <goals>
 8                 <goal>exec</goal>
 9             </goals>
10         </execution>
11     </executions>
12     <configuration>
13         <executable>java</executable>
14         <arguments>
15             <argument>-classpath</argument>
16             <classpath>
17             </classpath>
18             <argument>ctas.importer.reader.app.Program</argument>
19         </arguments>
20     </configuration>
21 </plugin>
复制代码

18行,改成自己的Main-Class类,然后用mvn exec:exec来运行,但是部署到生产环境中时,服务器上通常并不具备maven环境,只能用 java -jar xxx.jar这种方式来运行,下面是一些处理细节:

 

一、依赖项的处理

java application运行时需要查找依赖的第三方jar,如果查找classpath失败,就会报错,可以先用

mvn dependency:copy-dependencies -DoutputDirectory=target/lib

命令,把依赖的jar包全部导出到target/lib这个目录下

 

二、利用maven-jar-plugin修改META-INF\MANIFEST.MF 清单文件

java application的最终jar里,用解压工具打开后,可以看到META-INF目录下,有一个重要的清单文件 MANIFEST.MF,这里面可以指定 Main-Classclasspath,结构如下:

复制代码
1 Manifest-Version: 1.0
2 Built-By: jimmy
3 Build-Jdk: 1.7.0_09
4 Class-Path: lib/DataEntity-1.0.jar ...
5 Created-By: Apache Maven 3.2.3
6 Main-Class: ctas.importer.reader.app.Program
7 Archiver-Version: Plexus Archiver
复制代码

其中第4行指定了classpath,也就是所依赖的jar包在什么地方,第6行表示main函数的入口类,默认情况下mvn clean package生成的jar包里,清单文件上并没有这2行,需要在pom.xml中添加插件

复制代码
 1 <plugin>
 2     <groupId>org.apache.maven.plugins</groupId>
 3     <artifactId>maven-jar-plugin</artifactId>
 4     <configuration>
 5         <archive>
 6             <manifest>
 7                 <mainClass>ctas.importer.reader.app.Program</mainClass>
 8                 <addClasspath>true</addClasspath>
 9                 <classpathPrefix>lib/</classpathPrefix>
10             </manifest>
11         </archive>
12         <classesDirectory>
13         </classesDirectory>
14     </configuration>
15 </plugin>
复制代码

第7行指定Main-Class,第9行指定classpath的相对路径,这样mvn package后,清单文件里就会自动添加Main-Class和Class-Path这二项

ok了,部署时把jar包和lib目录,都上传到服务器上 ,然后测试一下,顺利的话 java -jar  xxx.jar就可以了,如果要在后台运行,前面加 nohup

分享到:
评论

相关推荐

    maven 过滤文件夹打包

    至于压缩包子文件的文件名称列表"package-folder",这可能是指Maven打包后的结果,即生成了一个名为`package`的文件夹。这个文件夹通常包含了项目的所有依赖、资源文件以及打包后的主应用程序。在Maven的默认配置中...

    maven打包dubbo服务接口(maven-assembly-plugin)

    最后,执行`mvn package`命令,Maven会根据`pom.xml`中的配置打包项目,并生成包含所有依赖的JAR文件。在上述例子中,这个JAR文件会包含Dubbo服务接口和其依赖的库,使得我们可以轻松地部署和运行服务。 在实际开发...

    springboot 多项目打包 jar包教程,包含源代码

    Spring Boot的可执行jar文件是一个自包含的应用,包含所有依赖库,可以直接运行。 1. **创建模块化项目结构** 在多项目打包中,我们需要将各个独立的Spring Boot项目作为模块进行组织。这些模块可以是Maven或...

    java打包jar.pdf

    Java打包和发布的基础是将Java代码打包成JAR(Java Archive)文件,这是一种方便管理和分发Java应用程序的方式。JAR文件本质上是多个.class文件的ZIP压缩格式,它允许开发者将相关的类、资源和元数据组织在一起,...

    java项目导出可执行jar包_笔记

    在Java开发过程中,将项目打包成可执行的JAR(Java Archive)文件是常见的操作,这使得代码可以方便地在不同环境中运行。本篇笔记主要介绍如何将Java项目导出为可执行JAR包,以便在没有开发环境的机器上也能运行程序...

    java项目打包工具

    Java项目打包工具是开发人员在完成Java应用程序或Web应用程序开发后,用来整合资源、编译代码、处理依赖、生成可部署文件的重要工具。这些工具帮助开发者将源代码、配置文件、库和其他资源组织成便于分发和运行的...

    jar包-JavaWeb所用到的jar包

    Java Web开发中,JAR(Java Archive)包是不可或缺的一部分,它主要用于集合多个类文件、资源文件以及元数据,便于代码的分发、部署和执行。JAR文件本质上是一个ZIP格式的压缩文件,包含了Java应用程序或库的所有...

    maven多环境配置打包

    总结来说,Maven的多环境配置打包能力使得Java项目能灵活适应不同环境,提高了代码的可维护性和部署效率。通过理解和熟练运用profiles和resource filtering,开发者可以更好地管理项目的配置,提升开发效率。

    Springboot项目正确打jar包maven版pom.rar

    本资源"Springboot项目正确打jar包maven版pom.rar"是针对SpringBoot项目使用Maven打包成可执行JAR文件的配置示例。 在SpringBoot项目中,我们通常使用Maven作为构建工具,因为它提供了强大的依赖管理和构建生命周期...

    Oracle19c 驱动jar包

    Oracle19c驱动jar包是Oracle数据库连接Java应用程序的关键组件,尤其对于那些使用JDK8和JDK10的开发者而言。这个压缩包包含了两个重要的jar文件:ojdbc10.jar和ojdbc8.jar,它们分别对应不同的Java版本兼容性。 1. ...

    使用IntelliJ Idea 打包成可执行的JAR.pdf

    标题中的“使用IntelliJ Idea 打包成可执行的JAR.pdf”指的是在IntelliJ IDEA这个集成开发环境中,如何将Java项目打包成一个可独立运行的JAR(Java Archive)文件。这个过程通常用于将Java应用程序整合到一个单一的...

    java程序打包工具

    Java程序打包工具是开发者在开发过程中必不可少的辅助工具,它们主要负责将源代码、资源文件、依赖库等组件整合成可执行的格式,以便于分发、部署和运行。在这个场景中,提到的"project-mjar-0.4"很可能是一个特定的...

    各种jar包,有你想不到的包,没有我没有的包,O(∩_∩)O

    在大型项目中,依赖管理工具如Maven或Gradle能自动处理这些依赖,确保所有必要的`jar`包都被正确地引入。 4. **运行`jar`包**:可以通过`java -jar`命令来运行一个包含主类的`jar`包,例如`java -jar myapp.jar`。...

    JAVA代码打包工具

    这里我们主要讨论的是Java应用程序的打包过程,包括JAR(Java Archive)文件的创建、运行以及更高级的WAR(Web Application Archive)和EAR(Enterprise Archive)文件的打包。 1. JAR文件打包:JAR文件是Java平台...

    jar包全网最全.zip

    - 打包JAR文件:使用`jar`命令行工具或IDE(如Eclipse、IntelliJ IDEA)可以将项目打包成JAR。 - 集成到项目:开发中,我们经常引用其他项目提供的JAR包,将其添加到项目的类路径中,以使用其中的类和功能。 3. *...

    java 打包

    在Java开发过程中,打包是一项非常重要的任务,它将编译后的类文件和其他资源组织成一个可执行的JAR(Java Archive)文件或者WAR(Web Application Archive)文件,便于部署、分发和运行。本篇文章主要讲解Java打包...

    最常用的几种Java打包方式总结

    - **JAR (Java Archive)**:适用于库文件或无依赖的可执行文件。 - **WAR (Web Application Archive)**:专为Web应用程序设计,包含所有Web资源(如HTML页面、JSP文件等)及类文件。 - **EAR (Enterprise ...

    java的打包与发布

    JAR文件的设计旨在提供一种跨平台的打包机制,使得Java应用可以方便地在不同的操作系统上运行而无需修改。 #### Manifest文件:JAR文件的灵魂 Manifest文件包含了JAR文件的关键元数据,如版本信息、创建者、主类名...

    JAVA项目打包方式

    标题“JAVA项目打包方式”指的是在Java开发过程中,如何将完成的项目整理成可执行的、便于分发的形式。在Java领域,常见的打包方式有JAR(Java Archive)、WAR(Web Application Archive)以及EAR(Enterprise ...

    springboot(web项目,非maven)

    Spring Boot简化了Java Web应用的开发过程,提供了快速构建可运行的应用程序的方式,而Maven则是一个流行的项目管理和依赖管理工具。在这里,我们可能假设开发者选择了Gradle或者其他构建工具替代Maven。 Spring ...

Global site tag (gtag.js) - Google Analytics