Zohan
  • 首页
  • Java
  • JavaScript
  • Nginx
  • About
  1. 首页
  2. zohan
  3. 详细信息
使用Maven打包单个可运行的应用程序:zohan 发布于:2016年12月22日 阅读次数:3500
使用Maven打包单个可运行的应用程序

    当我们开发完毕后,如何发布一个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和这个应用的打包程序。

    这样一个完整的应用打包计划就完成了。



  • Maven
  • java
本文由 zohan 创作,采用 CC BY 3.0 CN协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处,本文地址:/blog/9.html
打赏
支付宝打赏
微信打赏
Copyright © 2013-2025 zohan.cc 版权所有 .京ICP备15012738号-4
京公网安备11010802015888