From:https://www.linux178.com/Java/maven-release.html

用Java写了一个命令行的小程序,使用的Intellij IDE是IDEA13原来一直使用Ant来打包编译,为了学习一下maven打包,特此从Ant打包转转换为Maven打包发布

源码的目录结构如下:

conf 目录是 程序的配置文件所在的目录
lib  程序的依赖库文件
scripts 启动程序的叫,start.bat 是在window上启动的脚本,start.sh是在Linux启动的脚本
src 是源代码目录 build.xml 是Ant打包的脚本 

build.xml内容如下:

<project default="jar" name="easyxms"> <!-- 工程目录结构 project |-conf |-lib |-logs |-scripts |-src |-build.xml --> <property name="lib.dir" value="lib"/> <property name="src.dir" value="src"/> <property name="classes.dir" value="bin"/> <property name="output.dir" value="easyxms"/> <property name="scripts.dir" value="scripts"/> <property name="jarname" value="easyxms.jar"/> <property name="mainclass" value="org.easyxms.EasyXMS"/> <property name="orginal.conf.dir" value="conf"/> <property name="orginal.logs.dir" value="logs"/> <property name="logs.dir" location="${output.dir}/${orginal.logs.dir}"/> <property name="conf.dir" location="${output.dir}/${orginal.conf.dir}"/> <!-- 第三方jar包的路径 --> <path id="lib-classpath"> <fileset dir="${lib.dir}"> <include name="**/*.jar"/> </fileset> </path> <!-- 1. 初始化工作,如创建目录等 --> <target name="init"> <mkdir dir="${classes.dir}"/> <mkdir dir="${output.dir}"/> <mkdir dir="${logs.dir}"/> <mkdir dir="${conf.dir}"/> </target> <!-- 2. 编译 --> <target name="compile" depends="init"> <javac srcdir="${src.dir}" destdir="${classes.dir}"> <compilerarg line="-encoding UTF-8"/> <classpath refid="lib-classpath"/> </javac> <copy todir="${conf.dir}"> <fileset dir="${orginal.conf.dir}" excludes=".svn" /> </copy> <copy todir="${output.dir}"> <fileset dir="${scripts.dir}" excludes=".svn" /> </copy> <copy file="${src.dir}/log4j.properties" todir="${classes.dir}"/> <copy file="${src.dir}/commons-logging.properties" todir="${classes.dir}"/> </target> <!-- 3. 打包jar文件 --> <target name="jar" depends="compile"> <copy todir="${output.dir}/lib"> <fileset dir="${lib.dir}"/> </copy> <!--Create a property containing all .jar files, prefix lib/, and seperated with a space--> <pathconvert property="mf.classpath" pathsep=" "> <mapper> <chainedmapper> <!-- jar包文件只留文件名,去掉目录信息 --> <flattenmapper/> <!-- add lib/ prefix --> <globmapper from="*" to="lib/*"/> </chainedmapper> </mapper> <path refid="lib-classpath"/> </pathconvert> <!-- jar文件的输出路径 --> <jar destfile="${output.dir}/${jarname}" basedir="${classes.dir}"> <manifest> <attribute name="Main-class" value="${mainclass}"/> <attribute name="Class-Path" value="${mf.classpath}"/> </manifest> </jar> </target> </project> 

打包之后的结果:

二、使用Maven来打包发布

源码结构如下:

因为我没有测试的代码,就不需要 src/test目录

src/main 下的所有目录作用:

assemble/release.xml 这个是maven-assembly-plugin 这个插件使用的描述符文件,用来自定义打包发布(自定义发布包的目录结果)
conf 程序的配置文件目录
db   程序生产的数据库文件目录,这里面的.gitignore文件,是为了让git追踪该目录的,git默认情况是不追踪空目录的,这个目录是程序运行后会在里面创建数据库文件,所以需要该目录
example 添加Ip时的示例excel文件 java 源代码目录 logs 程序生成的日志文件目录,跟db目录类似,这个是程序运行产生的日志 resources 程序资源目录,比如log4j的配置文件log4j.properties,这个目录下的文件打成jar包的时候,会发到jar包的根目录下面,打包的过程中会放到 target/classes目录下 scripts 启动程序的脚本文件 pom.xml Maven定义项目依赖的文件 

这其中
pom.xml 文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.easyxms</groupId> <artifactId>easyxms</artifactId> <version>1.0.0</version> <packaging>jar</packaging> <!-- 定制项目信息 --> <name>easyxms</name> <url>http://www.easyxms.org</url> <licenses> <license> <name>Apache 2</name> <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url> <distribution>repo</distribution> <comments>A business-friendly OSS license</comments> </license> </licenses> <organization> <name>easyxms</name> <url>http://www.easyxms.org</url> </organization> <developers> <developer> <id>L</id> <name>LEO</name> <email>chanyipiaomiao@163.com</email> <url>http://www.easyxms.org</url> <organization>easyxms</organization> <organizationUrl>http://www.easyxms.org</organizationUrl> <roles> <role>developer</role> </roles> <timezone>+8</timezone> </developer> </developers> <!-- 定义依赖库文件 --> <dependencies> <dependency> <groupId>org.xerial</groupId> <artifactId>sqlite-jdbc</artifactId> <version>3.7.2</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.9</version> </dependency> <dependency> <groupId>jexcelapi</groupId> <artifactId>jxl</artifactId> <version>2.4.2</version> </dependency> <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.51</version> </dependency> <dependency> <groupId>it.sauronsoftware.base64</groupId> <artifactId>javabase64</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>commons-cli</groupId> <artifactId>commons-cli</artifactId> <version>1.2</version> </dependency> </dependencies> <!-- 编译打包 --> <build> <!-- 控制资源文件的拷贝 --> <resources> <resource> <directory>src/main/resources</directory> <targetPath>${project.build.outputDirectory}</targetPath> </resource> </resources> <plugins> <!-- 解决资源文件的编码问题 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>2.5</version> <configuration> <encoding>UTF-8</encoding> </configuration> </plugin> <!-- 设置源文件编码方式 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.6</source> <target>1.6</target> <encoding>UTF-8</encoding> </configuration> </plugin> <!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.3.2</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>org.easyxms.EasyXMS</mainClass> </manifest> </archive> </configuration> </plugin> <!-- 自定义发布版本包 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.4.1</version> <executions> <execution> <id>create-release-zip</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> <configuration> <appendAssemblyId>false</appendAssemblyId> <descriptors> <descriptor>src/main/assemble/release.xml</descriptor> </descriptors> </configuration> </plugin> </plugins> </build> </project> 

release.xml 文件内入如下:

<?xml version="1.0" encoding="UTF-8"?>
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> <id>release package</id> <formats> <format>zip</format> </formats> <!-- 打zip包时,包含一层打包目录 --> <includeBaseDirectory>true</includeBaseDirectory> <!-- 包含程序运行自身所需的目录 --> <fileSets> <fileSet> <directory>src/main/conf</directory> <outputDirectory>/conf</outputDirectory> </fileSet> <fileSet> <directory>src/main/logs</directory> <outputDirectory>/logs</outputDirectory> </fileSet> <fileSet> <directory>src/main/example</directory> <outputDirectory>/example</outputDirectory> </fileSet> <fileSet> <directory>src/main/db</directory> <outputDirectory>/db</outputDirectory> </fileSet> </fileSets> <!-- 把编译好的jar文件包含到发布的目录中去并设置脚本文件的权限--> <files> <file> <source>${project.build.directory}/${project.build.finalName}.${project.packaging}</source> <destName>easyxms.jar</destName> <outputDirectory>/</outputDirectory> </file> <file> <source>src/main/scripts/start.sh</source> <!-- 设置start.sh文件的换行符为unix换行符\n --> <lineEnding>unix</lineEnding> <outputDirectory>/</outputDirectory> <fileMode>0740</fileMode> </file> <file> <source>src/main/scripts/start.bat</source> <!-- 设置start.bat文件的换行符为dos换行符\r\n --> <lineEnding>dos</lineEnding> <outputDirectory>/</outputDirectory> </file> </files> <!-- 复制所有的依赖jar到发布的目录的lib目录下 --> <dependencySets> <dependencySet> <scope>runtime</scope> <outputDirectory>lib</outputDirectory> <!--不要把主程序本身包含进lib目录,如果不加这个主程序的jar包也会包含到lib目录下--> <useProjectArtifact>false</useProjectArtifact> </dependencySet> </dependencySets> </assembly> 

命令行进入到 F:\workspace\Java\EasyXMS 项目的目录

然后执行 mvn clean package,执行过程如下:

再到target目录下,就可以看到

easyxms-1.0.0.jar 这个项目主程序
easyxms-1.0.0.zip 是发布给别人使用的包,结构如下:

里面包含了项目的主程序,自此项目就从Ant打包转换为了Maven来打包发布了。

 

转载于:https://www.cnblogs.com/diyunpeng/p/6698708.html

使用Ant 和 Maven打包发布命令行程序(转载)相关推荐

  1. maven打包的命令

    maven打包的命令 mvn clean install package 先删除目标文件夹 编译并且打包 -pl 参数 : 选择具体打包哪个节点 例如 XXX-web XXX-api 多个模块 , 分 ...

  2. Picocli-快速构建Java命令行程序

    相信每个Java程序员都曾使用过Scanner ,因编写出一个命令行程序而兴奋不已. 命令行程序也颇为实用,然而,使用Java来编写一个功能强大的命令行程序却并不容易,主要有以下几方面的痛点: 没有成 ...

  3. 基于Golang的CLI 命令行程序开发

    基于Golang的CLI 命令行程序开发 [阅读时间:约15分钟] 一. CLI 命令行程序概述 二. 系统环境&项目介绍&开发准备 1.系统环境 2.项目介绍 3.开发准备 三.具体 ...

  4. java 打印命令_Java 普通命令行程序main关掉 DEBUG 打印

    最近在写一个简单的java命令行程序,执行代码时,代码窗口出现了烦人的debug日志. 分析了一下,出现这种问题的原因是因为,maven项目的依赖包中传递依赖了一些日志框架,导致会出现日志内容的打印. ...

  5. c语言程序命令行,ttyd(C语言编写的命令行程序) v1.3.1 免费版

    ttyd是一个C语言编写的命令行程序,可以把任意命令行程序分享到网页上操作,可以看做是个网页版的远程终端,支持 Linux.macOS 系统,还可以运行在 OpenWrt 之类的嵌入式系统上. 功能特 ...

  6. node.js命令行程序在Windows系统和Linux系统下的部署

    在Windows系统下全局部署node.js写的命令行程序 我们有一个简单的命令行程序,使用node.js的commander模块写的,只有一个文件hello.js,其内容如下: #!/usr/bin ...

  7. 解决 命令行程序 中文英文不对齐的情况

    解决 命令行程序 中文英文不对齐的情况 问题描述 我用java写了个命令行的工具程序,在程序中我会输出一些提示语句,这些输出语句中有中文,但是奇怪的是中文老是对不齐,强迫症的我看起来很不舒服. 原因 ...

  8. 命令行程序增加 GUI 外壳

    Conmajia © 2012 Updated on Feb. 21, 2018 命令行大家都用过: 图 1 命令行程序工作界面 现在想办法为它做一个 GUI 外壳,实际效果参考图 2. 图 2 带 ...

  9. myapp——自动生成小学四则运算题目的命令行程序(侯国鑫 谢嘉帆)

    1.Github项目地址 https://github.com/baiyexing/myapp.git 2.功能要求 题目:实现一个自动生成小学四则运算题目的命令行程序 功能(已全部实现) 使用 -n ...

最新文章

  1. iOS开发中接口调用使用https
  2. Hadoop集群安装-CDH5(5台服务器集群)
  3. GTK+ VS MFC
  4. [COGS 622] [NOIP2011] 玛雅游戏 模拟
  5. web api json_有关使用JSON Web令牌保护无服务器API的速成班
  6. 7-35 情人节 (15 分)
  7. 利用计算机提出算法分析问题,应用计算机计算不可积类型的积分算法分析
  8. bin文件查看器app_鸿蒙系统编译第一个APP:hello
  9. qt自定义控件之简单曲线图表控件
  10. Ubuntu 20.04 Please reinstall Android Studio from scratch
  11. VINS-Mono翻译
  12. ThreeJs 学习之旅(十六)—Physics(物理)
  13. springboot整合阿里云视频点播服务Vod——实现视频上传、删除、播放
  14. MongoDB的基础指令和练习笔记
  15. Java中notify() 和 notifyAll()的区别
  16. Apache 流框架 Flink,Spark Streaming,Storm
  17. QQ2009 Preview 下载 图片大赏+简单评测
  18. C++ escape和unescape算法
  19. JS如何将 DOM 生成图片并下载
  20. Quadratic Probing:二次方探查法

热门文章

  1. hdu1166 经典线段入门
  2. silverlight 读取wcf服务 读取宿主端的config 良好的方法
  3. Effective C++ ——设计与声明
  4. uploadify动态改变参数
  5. spark基础之RDD和DataFrame的转换方式
  6. (131)FPGA面试题-用波形图表示D触发器的功能
  7. (71)FPGA面试题-使用不同的代码实现2-4译码器?使用case语句
  8. 【STM32】【STM32CubeMX】STM32CubeMX的使用之九:ADC
  9. 【C语言】矩阵的最大值(指针专题)
  10. html 圆圈项目符号,html – 列表项下的项目符号