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

 <plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>java</executable>
<arguments>
<argument>-classpath</argument>
<classpath>
</classpath>
<argument>ctas.importer.reader.app.Program</argument>
</arguments>
</configuration>
</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-Class及classpath,结构如下:

 Manifest-Version: 1.0
Built-By: jimmy
Build-Jdk: 1.7.0_09
Class-Path: lib/DataEntity-1.0.jar ...
Created-By: Apache Maven 3.2.3
Main-Class: ctas.importer.reader.app.Program
Archiver-Version: Plexus Archiver

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

 <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>ctas.importer.reader.app.Program</mainClass>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
<classesDirectory>
</classesDirectory>
</configuration>
</plugin>

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

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

maven: 打包可运行的jar包(java application)及依赖项处理的更多相关文章

  1. maven打包可运行的jar包(包含依赖工程)

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  2. Ant打包可运行的Jar包(加入第三方jar包)

    本章介绍使用ant打包可运行的Jar包. 打包jar包最大的问题在于如何加入第三方jar包使得jar文件可以直接运行.以下用一个实例程序进行说明. 程序结构: 关键代码: package com.al ...

  3. IntellJ idea maven打包——项目带有第三方jar包

    今天用maven打包时,提示程序包com.aspose.slides不存在 原来第三方jar是直接导入的,打包时没找到 那项目中带有第三方jar包,怎么打包? 方法: 1.根路径建立lib包,将第三方 ...

  4. maven打包war,导入本地jar包

    方法1: 一 . 在项目根目录创建lib文件夹,把jar放入lib文件夹中 二 . 在项目中使用本地jar pom文件配置如下: <properties> <project.buil ...

  5. MAVEN打包同时引入本地jar包

    方法一(pom文件指定jar包目录进行引入) 1.将需要手动引入的包放在项目目录下,如lib目录下: 修改pom文件,引入依赖并且将scope设置为system 2.同时配置maven打包插件 方法二 ...

  6. MyEclipse打包可运行的jar包

    详细步骤: Export... -> java -> Runnable JAR file Launch configuration:选择main方法所在的文件/类 Export desti ...

  7. eclipse使用MAVEN打包可执行的jar包

    1.新建maven工程 注意勾选 随便填一下 建好之后工程目录如下 新建测试类与工具类,主类很简单 工具类也很简单,就是初始化了日志 maven依赖包也只有一个log4j的jar <depend ...

  8. maven 打包Scala代码到jar包

    idea的pom.xml文件配置 <dependencies> <dependency> <groupId>org.scala-lang</groupId&g ...

  9. maven打包产生可执行jar包

    http://blog.csdn.net/u014695188/article/details/53128095 https://blog.csdn.net/fuck487/article/detai ...

随机推荐

  1. 创建用户故事地图(User Story Mapping)的8个步骤

    [小编]上周六了解了用户故事地图后,小编又查阅了一些资料,找到了以下这篇关于如何组织用户故事地图规划的文章,分享给大家.也希望大家如果有好的实践,也可以留言一起交流. 原文地址:http://winn ...

  2. 看看Parallel中高度封装的三个方法,Invoke,For和ForEach

    说到.net中的并行编程,也许你的第一反应就是Task,确实Task是一个非常灵活的用于并行编程的一个专用类,不可否认越灵活的东西用起来就越 复杂,高度封装的东西用起来很简单,但是缺失了灵活性,这篇我 ...

  3. Java并发之死锁实例

    package com.thread.test.thread; /** * Created by windwant on 2016/6/3. */ public class MyTestDeadLoc ...

  4. W3School-CSS测验

    The only way to survive was to enjoy the good moments and not dwell too much on the bad. 生活,就应该享受美好的 ...

  5. InnoDB源码分析--事务日志(一)

    原创文章,转载请注明原文链接(http://www.cnblogs.com/wingsless/p/5705314.html) 在之前的文章<InnoDB的WAL方式学习>(http:// ...

  6. iOS UIButton 图片文字上下垂直布局 解决方案

    实现如图所示效果: 这是一个UIButton,需要改变image和title相对位置. 解决如下: //设置文字偏移:向下偏移图片高度+向左偏移图片宽度 (偏移量是根据[图片]大小来的,这点是关键)b ...

  7. day 2 系统分区 扩展.md

    1.分区类型 主分区: 最多只能有四个. 扩展分区: 最多只能有一个. 主分区加扩展分区最多有4个. 不能写入数据,只能包含逻辑分区. 逻辑分区 2.格式化 格式化(高级格式化)又称逻辑格式化,它是指 ...

  8. Apache

    一.简介 Apache是世界使用排名第一的Web服务器软件.它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一.它快速.可靠并且可通过简单的A ...

  9. corefile 设置

    程序运行的过程中,可能会因为一些隐藏的bug导致崩溃,为了在出问题时,及时记录所在环境的情况,所以要设置core文件的产生.其实其本质就是把进程的内存保存到文件中去. 1.core文件的生成开关和大小 ...

  10. web报表工具FineReport常用函数的用法总结(报表函数)

    说明:本次总结中,凡是以tableName或viewName作为参数因子的.函数在调用的时候均按照先从私有数据源中查找,然后再从公有数据源中查找的顺序. CLASS CLASS(object):返回o ...