当我们开发完毕后,如何发布一个jar的应用程序,今天我们来说一说如何,使用maven在开发完成后打包成一个完整的tar.gz包,需要把引导文件、配置文件、和依赖的jar包统一打包成一个包。减少运维人员在运维过程中出现的各种情况。首先我们来看一下完整的开发过程中的目录结构
├─relink-im────────────────────
│ ├─doc
│ ├─src
│ │ ├─main
│ │ │ ├─bin
│ │ │ ├─conf
│ │ │ └─java
│ │ │ └─cc
│ │ │ └─relink
│ │ │ └─service
│ │ │ └─im
│ │ └─test
│ │ └─java
│ │ └─cc
│ │ └─relink
│ │ └─service
│ │ └─im
└─────────────────────────────
<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>cc.relink.service</groupId> <artifactId>relink-im</artifactId> <version>1.0</version> <packaging>jar</packaging> <name>relink-im</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring.version>3.2.8.RELEASE</spring.version> <hibernate.version>3.5.5-Final</hibernate.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <!--....等其他的依赖包--> </dependencies> <build> <finalName>${project.name}</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <encoding>UTF-8</encoding> <source>1.7</source> <target>1.7</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.3.2</version> <configuration> <excludes> <exclude>*.properties</exclude> <exclude>*.xml</exclude> </excludes> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix></classpathPrefix> <mainClass>cc.relink.service.im.MainApp</mainClass> </manifest> </archive> </configuration> </plugin> <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.4.1</version> <configuration> <finalName>relink-im</finalName> </configuration> <executions> <execution> <id>make-zip</id> <!-- 绑定到package生命周期阶段上 --> <phase>package</phase> <goals> <!-- 绑定到package生命周期阶段上 --> <goal>single</goal> </goals> <configuration> <descriptors> <!--描述文件路径 --> <descriptor>release.xml</descriptor> </descriptors> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
上面是开发过程中pom.xml的配置文件,其中省略项目依赖的jar包配置,我们要打包可运行的一个包,需要借助assembly
插件,下面我们把assembly插件配置看一下:
<?xml version="1.0" encoding="UTF-8"?> <assembly> <id>${project.version}</id> <baseDirectory>relink-im</baseDirectory> <formats> <format>dir</format> <format>tar.gz</format> </formats> <fileSets> <fileSet> <directory>${project.basedir}\src\main\bin</directory> <outputDirectory>\bin</outputDirectory> </fileSet> <fileSet> <directory>${project.basedir}\src\main\conf</directory> <outputDirectory>\conf</outputDirectory> </fileSet> <fileSet> <directory>${project.basedir}\src\main\templates</directory> <outputDirectory>\templates</outputDirectory> </fileSet> <fileSet> <directory>${project.basedir}\src\main\java\cc\relink\service\im\openim\mapping</directory> <outputDirectory>\conf\cc\relink\service\im\openim\mapping</outputDirectory> </fileSet> </fileSets> <dependencySets> <dependencySet> <useProjectArtifact>true</useProjectArtifact> <outputDirectory>lib/</outputDirectory><!-- 将scope为runtime的依赖包打包到lib目录下。 --> <scope>runtime</scope> </dependencySet> </dependencySets> <moduleSets> <moduleSet> <useAllReactorProjects>true</useAllReactorProjects> <binaries> <outputDirectory>lib/</outputDirectory> </binaries> </moduleSet> </moduleSets> </assembly>
简单说明下,打成的包,我们有四个目录,分别是bin、conf、templates、lib。bin目录里面存放了应用程序的启动关闭脚本restart.sh;配置文件放在conf目录下,conf下面还有cc\relink\service\im\openim\mapping是什么?对你猜的没错,我们是用了mybatis,mapping下面就mybatis的映射文件;templates是用了freemaker的一些模版,但是这个应用不是一个web应用;lib是依赖的jar和这个应用的打包程序。
这样一个完整的应用打包计划就完成了。