打包:

第一种情况:独立项目,且无第三方依赖包

这种情况下,我们需要maven的maven-jar-plugin插件来帮我们打包。请在项目pom.xml中的plugin配置处加入如下内

<plugin>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <!-- 如果项目带有3rd-party lib,这些依赖将被放入lib文件夹 -->
                <!-- 注意:这个文件夹要随着jar文件一起distribute,否则jar文件运行时将报错 -->
                <classpathPrefix>lib/</classpathPrefix>
                <mainClass>com.yourProjectPackage.YourEntranceClass</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>
 

然后用mvn clean install来编译安装你的项目。命令执行结束后会生成一个jar文件,一个lib文件夹(如果你的项目引用了3rd-party dependencies的话)。双击jar文件,就立刻看到效果了。有界面的项目应该能看到主界面(如果你程序没错的话),没有界面的,应该可以从你机器的java console里看到相关信息,或者项目自身有log输出或具有神奇的效果的,可以直接去检视输出结果。

第二种情况:项目+第三方依赖包

这种情况就无法使用maven-jar-plugin插件来打包了。我们要用另一个插件maven-assembly-plugin。这个插件可以帮助我们灵活的打包我们的项目(不仅打包jar项目,还可以用于ear、war等项目的打包,本文只介绍如何打可执行jar包)。这里,我们使用此插件将我们的source code编译结果以及项目的dependencies打到一起,形成一个jar文件。

下面就是项目的pom.xml中plugin的配置部分:

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <!-- 这个archive以及archive里面的设置很重要,没有这个配置,就无法生成可执行jar文件 -->
        <archive>
            <manifest>
                <mainClass>com.your.package.YourEntranceClass</mainClass>
            </manifest>
        </archive>
        <!-- 这个jar-with-dependencies是这个插件中预置的,不用管它,尽管用就好了 -->
        <!-- 当然,你也可以用自己的descriptor。如何用?自己去查这个插件的文档 -->
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <!-- 这里的phase和goals都是maven的基础概念,不懂的可以去看maven的文档 -->
            <!-- 总之,当你install你的project的时候,是会涵盖package phase和single goal的 -->
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>
 
 

Maven编译可执行jar的更多相关文章

  1. Maven打包可执行Jar包方式

    第一步:pom.xm中的build标签下加入maven插件配置,打包生成可执行jar包方式Maven中的打包方式更换为 <packaging>jar</packaging> b ...

  2. Apache Maven 打包可执行jar

    在本文的 参考资料 部分,您将发现大量介绍 Maven 的入门教程.本文的 5 个技巧目的是帮助您解决即将出现的一些问题:使用 Maven 管理您的应用程序的生命周期时,将会出现的编程场景. 1. 可 ...

  3. maven打包可执行jar文件运行报错

    起因 项目中同时依赖了Spring和MyBatis,并使用mybatis-spring集成MyBatis和Spring. 使用maven打包为可执行jar文件运行,打包插件为:maven-shade- ...

  4. Spring Boot Maven 打包可执行Jar文件!

    Maven pom.xml 必须包含 <packaging>jar</packaging> <build> <plugins> <plugin&g ...

  5. spring boot项目maven打包可执行JAR

    在pom.xml中添加如下配置: <!-- 打包可执行jar包 --> <plugin> <groupId>org.springframework.boot< ...

  6. maven 打包可执行jar的两种方法

    1.修改pom.xml增加如下内容 <build> <pluginManagement> <plugins> <plugin> <groupId& ...

  7. maven创建可执行jar包项目的配置

    <build> <plugins> <plugin> <artifactId>maven-shade-plugin</artifactId> ...

  8. 使用maven生成可执行jar包(包含依赖)

    零零散散找了一些文章,有些感觉好乱,自己整理一下 以下是pom.xml里的配置,本来有很多依赖包,为了不让配置看着很长,我删了一些dependencies中我自己项目中引入的jar包 <proj ...

  9. maven 打包可执行jar的方法

    转自:http://blog.csdn.net/johnnywww/article/details/7964326 1.修改pom.xml增加如下内容 <plugin> <group ...

随机推荐

  1. UML九种图-包图、类图

    UML九种图-包图.类图 一.包 (一)相关概念: 1.包: 一个包=一层=一个命名空间=一个文件夹 2.包的命名: 简单名:王老二 路径名:中国.河北省.廊坊市.廊坊师范学院.信息技术提高班.九期班 ...

  2. 在路由器上搭建SVN服务器

    在路由器上搭建SVN服务器 SVN托管服务大家都不陌生了,我最早开始用的是谷歌提供的SVN,因为在上面托管的项目都是开源的,所以当有些项目不方便在网上公开的时候,就需要自己搭建SVN服务器了.wind ...

  3. 单例模式及C++实现代码

    单例模式及C++实现代码 单例模式 单例模式,可以说设计模式中最常应用的一种模式了,据说也是面试官最喜欢的题目.但是如果没有学过设计模式的人,可能不会想到要去应用单例模式,面对单例模式适用的情况,可能 ...

  4. 如何使用Add-on SDK开发一个自己的火狐扩展

    黄聪:如何使用Add-on SDK开发一个自己的火狐扩展 火狐开放了扩展的开发权限给程序员们,相信很多人都会希望自己做一些扩展来方便一些使用. 我最近做一些项目也需要开发一个火狐扩展,方便收集自己需要 ...

  5. 用友CDM系统“货位间商品移库单(一步)”表体增加“货位可用数量”字段,根据表头的选择的货位自动带出数值

    系统控制台——业务单据定制——货位间商品移库单(一步) 明细字段——增加“可销数量”字段. 然后修改明细字段的“商品编号”自定义查询方案. 增加自定义资料检索方案hwyksp SQL: select ...

  6. 《Head First Python》学习笔记03 异常处理

    异常(运行时错误): 当代码逻辑遇到意外事件时,比如打开一个文件,却发现文件不存在.这时是增加额外的代码处理逻辑,还是捕获异常呢?答案是:Python优先推荐捕获异常,然后恢复. Python异常机制 ...

  7. js广告轮询效果

    var intervalTime = 5000; var showIndex = 0; var imageLength=0; $(window).load(function () { var heig ...

  8. 从零开始学C++之继承(二):继承与构造函数、派生类到基类的转换

    一.不能自动继承的成员函数 构造函数 析构函数 =运算符 二.继承与构造函数 基类的构造函数不被继承,派生类中需要声明自己的构造函数. 声明构造函数时,只需要对本类中新增成员进行初始化,对继承来的基类 ...

  9. android 源码编译 问题 列表

    转自:http://www.cnblogs.com/xilinch/archive/2013/04/02/2996359.html make: *** [out/host/linux-x86/obj/ ...

  10. 强悍的 CSS 扩展语言 -- Sass

    <div class = 'testBorder'> <p> <input/> </p> </div> 假设上面这 3 个 DOM 元素有这 ...