Maven提示:有关可执行jar的所有信息

Maven提示:有关可执行jar的所有信息

在分发代码时,可执行jar是非常有用的工具。 这意味着,只要将Java安装在客户端计算机上,至少在Windows和Mac上,您的用户只需双击jar即可启动程序。 另外,在命令行上,可以使用简单的命令行java -jar xxx.jar轻松启动程序。

不用大惊小怪的类路径和相关的罐子。

从Maven创建可执行jar很简单,涉及使用maven-assembly-plugin 。 可以如下配置并添加到您的pom.xml中:

<plugin><artifactId>maven-assembly-plugin</artifactId><configuration><archive><manifest><mainClass>com.example.Main</mainClass></manifest></archive><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration><executions><execution><phase>install</phase><goals><goal>single</goal></goals></execution></executions></plugin>

让我们深入研究细节:

<goal>single<goal>告诉插件我们要执行单个目标。 有关更多文档,请参见此处 。
<phase>install<phase>告诉插件我们希望此任务作为安装生命周期事件的一部分运行。
<descriptorRef>jar-with-dependencies</descriptorRef>告诉插件我们希望jar包含所有依赖项。 <mainClass>com.example.Main</mainClass>告诉插件执行jar时应启动哪个类。

在这种情况下,我将插件设置为在安装生命周期内生成一个可执行jar,但是如果希望它成为生命周期的不同部分,则当然可以更改该设置。

您希望Maven为您完成的另一项任务是在发行版中创建可执行jar。

为此,您将需要配置maven-release-plugin以创建可执行jar。 可以按照以下步骤完成:

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-release-plugin</artifactId><version>2.5.1</version><configuration><goals>install</goals><preparationGoals>install</preparationGoals></configuration>
</plugin>

这里的关键是准备版本的配置,由release:prepare调用。 当配置为prepareGoal时,将提交之前执行安装(默认prepareGoal是干净验证)。 通过将install添加到preparationGoals中,我们确保将在提交之前构建可执行jar。 它将使用与发行版相同的编号标记。 如果我们从1.3版升级到1.4版,则可执行jar将被命名为xxx-jar-with-dependencies-1.4.jar。

比较当您将安装配置为完成目标而不是准备目标时发生的情况。 在与上述相同的示例中,从版本1.3迁移到1.4,如果将install配置为completementGoal,则将在提交运行安装,并且将生成的可执行jar称为xxx-jar-with-dependencies-1.5-SNAPSHOT.jar 。

目标(与preparationGoal和completionGoal相对)由release:perform运行。 默认情况下,它调用部署。 有关为何将其配置为调用安装的信息,请参见此处 。

总之,我希望您能看到使用Maven构建可执行jar并在每次发布项目时使用正确的release标签将其发布是多么容易。

翻译自: https://www.javacodegeeks.com/2015/02/maven-tip-all-about-executable-jars.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360828.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 查询一张表的数据用于补充另外一张表的数据 MySQL数据库

UPDATE bookhistory bh set bh.CategoryId (SELECT CategoryId FROM booklist bk where bk.Id bh.BookListId)

Gentoo man手册指南

转载&#xff1a;http://www.gentoo.org/doc/zh_cn/man-guide.xml#doc_chap2 http://blog.csdn.net/andyelvis/article/details/4044938 使用man命令技巧 Gentoo man手册指南 内容: 1. 简介2. 使用man结构 1. 简介 man程序 每一个人在他的linux人生中都使用…

Java 8 Lambda表达式教程

问候&#xff01; :) 离开几个月后&#xff0c;我决定恢复风格:)。 我注意到我以前有关新的Date / Time API的一篇文章非常受欢迎&#xff0c;因此这次我将把本篇文章专门介绍Java 8的另一个新功能&#xff1a; Lambda Expressions 。 功能编程 Lambda表达式是Java编程语言最…

React 父组件(hooks)调用子组件(calss)方法

父组件&#xff08;hooks&#xff09; let richTextRef {};<RichText getRichText{getRichText} content{content} onRef{ref > richTextRef ref} />子组件&#xff08;class&#xff09; componentDidMount () > {this.props.onRef && this.props.onRe…

[HDU] 2553 N皇后问题-简单深搜

题目链接&#xff1a; http://acm.hdu.edu.cn/showproblem.php?pid2553 方法&#xff1a; 1.可以用对称的思想&#xff0c;即&#xff1a;如果N是偶数&#xff0c;则只计算第一个皇后分别放在第一行的位置1到N/2这N/2个情况的结果和&#xff0c;最后再乘以2。如果是奇数&#…

您真的了解@WebService吗?

SOAP Web服务无论如何都不是最先进的技术-尽管它仍然存在&#xff0c;但是基于REST的Web服务却提供了激烈的竞争。 无论如何–这绝对不是REST vs SOAP帖子&#xff01; 我观察到了一些实例&#xff0c;至少可以说&#xff0c;使用基于Java的SOAP Web服务的方式不太理想。 我认…

全局使用dva dispatch

// 第一种 这个umi2还可以 umi3就不可以了 window.g_app._store.dispatch({type: login/logout,});// 第二种 调用dispatch(所有models都可以) getDvaApp()._store.dispatch({type: login/logout,});

[转]JQuery.Ajax之错误调试帮助信息

本文转自&#xff1a;http://blog.csdn.net/lampsunny/article/details/8053967 下面是Jquery中AJAX参数详细列表&#xff1a; 参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址。 type String (默认: "GET") 请求方式 ("POST&quo…

将策略插入JBoss Apiman

JBoss apiman项目 本周刚刚发布了1.0.3.Final 。 它主要是一个错误修复版本&#xff0c;仅进行了一些相对较小的改进。 自从我上次写博客以来&#xff0c;其中的一个特殊功能就是对插件的支持。 这些插件可以轻松添加到系统中&#xff0c;以提供其他功能。 将策略添加为插件 当…

Error: Module “xxx“ does not exist in container. / antd pro v5启用qiankun报错 / 同时使用mfsu和qiankun报错

一、问题描述 我们用antd pro v5搭建前端项目&#xff0c;启用qiankun微前端模式&#xff0c;终端报错如下&#xff1a; Uncaught (in promise) Error: Module “xxx” does not exist in container. while loading “xxx” from webpack/container/reference/mf 经过排查&…

双链表

问题&#xff1a;在分配空间时&#xff0c;遇到问题 定义一个结构体&#xff1a; typedef struct dLinkListNode{ int data; struct dLinkListNode *prior; struct dLinkListNode *next;}*dLinkList,dListNode; dList(dLinkList)malloc(sizeof(dListNode));与dList(dLinkList)m…

paip.C#.NET多线程访问 toolStripStatusLabel

paip.C#.NET多线程访问 toolStripStatusLabel 作者Attilax &#xff0c; EMAIL:1466519819qq.com toolStripStatusLabel控件比较特殊&#xff0c;无法定义invoke来线程调用。。只好使用原生委托..代码稍微多一些.. delegate void clsC417(); xxx() { …

antd Table/ProList中rowClassName用法(补充记录)

rowClassName{setRowClassName}const setRowClassName (record) > {return record.id currentRecord ? styles.checkstyle : ;};

每个客户使用Jersey处理的Cookie

许多REST服务会将cookie用作身份验证/授权方案的一部分。 这是一个问题&#xff0c;因为默认情况下&#xff0c;旧的Jersey客户端将使用单例CookieHandler.getDefault &#xff0c;大多数情况下&#xff0c;该示例将为null&#xff0c;如果不为null&#xff0c;则在多线程服务器…

domino从Excel导入数据

HTML部分—————————————————————————————————————————————— 1 <table style"WIDTH: 99%; BORDER-COLLAPSE: collapse" class"linkeytable"> 2 <tbody> 3 <tr> 4 <td width"15%&qu…

uniapp 微信小程序打包 vendor.js过大 导致打包超过2M

1、分包加载&#xff0c;小程序限制一个包2M&#xff0c;可以分9个子包&#xff0c;整包共计不能超出20M&#xff0c;这一步很简单&#xff0c;如果看文档感觉枯燥的可以参考uview框架的demo&#xff0c;因为这个demo就使用了小程序的分包机制&#xff0c;demo链接&#xff08;…

JVMTI标记如何影响GC暂停

这篇文章分析了为什么Plumbr Agents在某些情况下以及如何延长GC暂停的时间。 对基本问题进行故障诊断揭示了有关在GC暂停期间如何处理JVMTI标记的有趣见解。 发现问题 我们的一位客户抱怨说&#xff0c;附加了Plumbr代理后&#xff0c;应用程序的响应速度明显降低。 通过分析G…

[置顶] 状态压缩DP 简单入门题 11题

1.每一行用一个二进制数表示&#xff0c; 有些二进制数是题目中不合法的状态&#xff0c;我们可以预处理出一行合法状态的个数&#xff0c;在递推的过程中复杂度就会大大降低。 POJ 3254 Corn Fields codePOJ 3311 Hie with the Pie codeHDU 4539…

Css fade()函数降低颜色变量透明度

primary-color颜色变量 background-color: fade(primary-color, 20%);

使用Apache Hadoop计算PageRanks

目前&#xff0c;我正在接受Coursera的培训“ 挖掘海量数据集 ”。 我对MapReduce和Apache Hadoop感兴趣已有一段时间了&#xff0c;通过本课程&#xff0c;我希望对何时以及如何MapReduce可以帮助解决一些现实世界中的业务问题有更多的了解&#xff08;我在这里介绍了另一种解…