700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > maven打包可执行jar

maven打包可执行jar

时间:2024-05-01 12:55:31

相关推荐

maven打包可执行jar

文章目录

1 场景1.1 功能1.2 特性1.3 依赖maven插件2 实现2.1 代码目录结构2.2 文件说明2.3 打包可执行文件3 获取项目相对路径3.1 输出文件到项目相对路径3.2 输出日志文件3.3 读取外部配置文件

1 场景

1.1 功能

通过maven名称生成可执行jar。

1.2 特性

(1)jar可读取外部配置文件

(2)生成doc、执行脚本文件

(3)打包时生产环境配置文件替换开发配置文件

1.3 依赖maven插件

(1)maven-jar-plugin

(2)maven-assembly-plugin

2 实现

2.1 代码目录结构

项目名称:mysql-doc,用于生成mysql数据库表结构到excel

src-main-config-assembly-package.xml //[2]-doc-生成mysql表结构文档.txt-proConfig-log4j.properties-mysql.properties-scropts-start.bat-start.sh-java-com.ext.sjckall.mysql.doc.main-MainExec //[3]-resources-log4j.properties-mysql.properties-pom.xml //[1]

2.2 文件说明

[1]pom.xml文件配置maven插件

<build><finalName>mysql-doc</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.1.0</version><configuration><archive><!--生成的jar中,不要包含pom.xml和pom.properties这两个文件--><addMavenDescriptor>false</addMavenDescriptor><manifest><!--是否要把第三方jar放到manifest的classpath中--><addClasspath>true</addClasspath><!--生成的manifest中classpath的前缀,因为要把第三方jar放到lib目录下,所以classpath的前缀是lib/--><classpathPrefix>lib/</classpathPrefix><!--运行jar包时运行的主类,要求类全名--><mainClass>com.ext.sjckall.mysql.doc.main.MainExec</mainClass></manifest><!-- classPath下增加目录 --><manifestEntries><Class-Path>.</Class-Path> </manifestEntries> </archive><!--过滤掉不希望包含在jar中的文件--><excludes><!-- 排除不需要的文件夹(路径是jar包内部的路径) --><exclude>*.properties</exclude></excludes></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>3.1.0</version><!-- 对项目的组装进行配置 --><configuration><!-- 指定assembly插件的配置文件所在位置 --><descriptors><descriptor>src/main/config/assembly/package.xml</descriptor></descriptors></configuration><executions><execution><id>make-assembly</id><!-- 将组装绑定到maven生命周期的哪一阶段 --><!--<phase>package</phase>--><goals><!-- 指定assembly插件的打包方式, --><goal>single</goal></goals></execution></executions></plugin></plugins></build>

[2]package.xml文件内容

<?xml version="1.0" encoding="UTF-8"?><assembly><id>full</id><!-- 最终打包成一个用于发布的zip文件 --><formats><format>zip</format></formats><!-- 把依赖jar包打包进Zip压缩文件的lib目录下 --><dependencySets><dependencySet><!--不使用项目的artifact,第三方jar不要解压,打包进zip文件的lib目录--><useProjectArtifact>false</useProjectArtifact><!-- 第三方jar打包进Zip文件的lib目录下,注意此目录要与maven-jar-plugin中classpathPrefix指定的目录相同,不然这些依赖的jar包加载到ClassPath的时候会找不到 --><outputDirectory>lib</outputDirectory><!-- 第三方jar不要解压--><!--<unpack>false</unpack>--></dependencySet></dependencySets><!-- 文件设置,你想把哪些文件包含进去,或者把某些文件排除掉,都是在这里配置--><fileSets><!-- 把项目自己编译出来的可执行jar,打包进zip文件的根目录 --><fileSet><directory>${project.build.directory}</directory><outputDirectory></outputDirectory><includes><include>*.jar</include></includes></fileSet><!-- 生产配置文件 --><fileSet><directory>src/main/config/proConfig</directory><outputDirectory></outputDirectory><includes><include>*</include></includes></fileSet><!-- 执行脚本目录 --><fileSet><directory>src/main/config/scripts</directory><outputDirectory></outputDirectory><includes><include>*</include></includes></fileSet><!-- 说明文档目录 --><fileSet><directory>src/main/config/doc</directory><outputDirectory>doc</outputDirectory><includes><include>*</include></includes></fileSet></fileSets></assembly>

[3]程序入口文件MainExec

public class MainExec {private static final Logger LOG=Logger.getLogger(MainExec.class);public static void main(String[] args) {SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");LOG.info("[生成mysql文档]开始时间:"+dateFormat.format(new Date()));ExecMysqlToDoc.mainMethod();LOG.info("[生成mysql文档]结束时间:"+dateFormat.format(new Date()));}}

2.3 打包可执行文件

项目根目录下执行如下命令:

(1)编译项目

mvn clean install

(2)打包文件

mvn assembly:single

打包后生成文件:mysql-doc-full.zip,文件目录如下:

mysql-doc-doc-生成mysql表结构文档.txt-lib-*.jar-log4j.properties-mysql.properties-mysql-doc.jar-start.bat-start.sh

整理后端bat脚本如下:

C:echo [1、项目编译]cd C:\work\ideaWsAll\trunkPro\sjckendcall mvn clean installpauseecho [2、打包文件]cd C:\work\ideaWsAll\trunkPro\sjckend\mysql-doccall mvn assembly:singlepauseecho [3、复制文件]xcopy /y /c /h /r "C:\work\mysql-doc\target\mysql-doc-full.zip" "D:\myData"

3 获取项目相对路径

3.1 输出文件到项目相对路径

项目运行期间,会输出相关文件到执行文件绝对路径下,采用此种方式获取执行jar的绝对路径。参数为执行代码的class。

/*** 获取执行jar路径* @return*/private static String getJarUrl(Class<?> clazz){String filePath=clazz.getProtectionDomain().getCodeSource().getLocation().getPath();try {//转换处理中文及空格 filePath = URLDecoder.decode(filePath, "UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();} //可执行jar包运行的结果里包含".jar"if (filePath.endsWith(".jar")) {//截取路径中的jar包名filePath = filePath.substring(0, filePath.lastIndexOf("/") + 1);}return filePath;}

如需要将项目结果输出到执行jar平级的文件夹内,可以采用以下方式获取文件夹绝对路径:

/*** 获取执行输出目录* @return*/public static String getJarOutUrl(Class<?> clazz){String filePath=getJarUrl(clazz);filePath=filePath+"out/";File file=new File(filePath);if(!file.exists()){file.mkdirs();}return filePath;}

3.2 输出日志文件

如需要将日志输出到执行jar的平级文件夹logs中,log4j.properties采用如下配置:

log4j.appender.result=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.result.Threshold=INFOlog4j.appender.result.file=./logs/result.loglog4j.appender.result.DatePattern='.'yyyy-MM-dd'.log'log4j.appender.result.layout=org.apache.log4j.PatternLayoutlog4j.appender.result.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] [ %l ] - [ %p ]: %m%nlog4j.appender.result.Append=truelog4j.appender.result.encoding=UTF-8

3.3 读取外部配置文件

读取外部properties配置文件,可采用如下方式:

Properties properties = new Properties();properties.load(MysqlConfigContent.class.getClassLoader().getResourceAsStream("./mysql.properties"));

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。