Java游戏服务器开发之二十一--使用mvaen打包jar并运行.md

Posted by lizhao on 07-09,2019

Java游戏服务器开发之二十一--使用mvaen打包jar并运行

本次更新内容

这次添加了使用maven打包运行的方式

2种运行方式

  1. 在编译器中直接运行com.lizhaoblog.Main

    • 这时候pom.xml文件中的build--resources--resource标签下的filtering/targetPath,将targetPath行注释掉
  2. jar启动

    1. 打包
      • 使用maven打包,然后使用命令行的方式运行,这里包括把资源配置打到一个jar包和 将资源配置单独打包出来的方式
      • 控制的开关是pom.xml文件中的build--resources--resource标签下的filtering/targetPath
      • 如果想要将资源文件打包到一个jar包中的话,就把targetPath注释掉
      • 反之则打开targetPath,注释掉filtering
    2. 运行
      • 使用 "java -jar xxx.jar"方式启动
      • original-all-in-one-1.0-SNAPSHOT.jar 这个是只有我们的项目,需要依赖同级目录下的lib
      • all-in-one-1.0-SNAPSHOT.jar 这个是包括lib在内的

代码修改

只改了pom文件,添加了几个maven打包时的插件,具体代码如下:

  • pom.xml
<build>

    <sourceDirectory>src/main/java</sourceDirectory>
    <!--<outputDirectory>${project.basedir}/out</outputDirectory>-->
    <!-- 如果不添加此节点mybatis的mapper.xml文件都会被漏掉。 -->
    <resources>
      <!-- 控制资源文件的拷贝 -->
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
          <include>**/*.tld</include>
        </includes>

        <!--这个filtering和targetPath一个打开一个关闭-->
        <!--在平常编译运行的时候打开filtering-->
        <!--在打包的时候打开targetPath-->
        <filtering>false</filtering>

        <!-- 配置文件外置(在打包时取消注释)
            资源文件拷贝到编译输出路径target的子文件夹config目录下,最终结构如下:
            target
               ...config
                   ...spring
                   ...data-static-config
                   ...mybatis
                   ...properties
               ...lib
               ...ngame.jar
         -->
        <!--<targetPath>${project.build.directory}/config</targetPath>-->
      </resource>

    </resources>

    <plugins>

      <!--<plugin>-->
        <!--<groupId>org.apache.maven.plugins</groupId>-->
        <!--<artifactId>maven-compiler-plugin</artifactId>-->
        <!--<version>3.1</version>-->
        <!--<configuration>-->
          <!--<source>1.8</source>-->
          <!--<target>1.8</target>-->
          <!--<encoding>UTF8</encoding>-->
        <!--</configuration>-->
      <!--</plugin>-->

      <!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
          <archive>
            <!-- 清单文件 -->
            <manifest>
              <mainClass>com.lizhaoblog.Main</mainClass>
              <addClasspath>true</addClasspath>
              <classpathPrefix>libs/</classpathPrefix>
            </manifest>
            <!-- 给清单文件添加键值对(配置文件外置) -->
            <manifestEntries>
              <Class-Path>config/</Class-Path>
            </manifestEntries>
          </archive>
          <classesDirectory>
          </classesDirectory>
        </configuration>
      </plugin>
      <!-- 拷贝依赖的jar包到lib目录 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
          <execution>
            <id>copy</id>
            <phase>package</phase>
            <goals>
              <goal>copy-dependencies</goal>
            </goals>
            <configuration>
              <outputDirectory>
                ${project.build.directory}/libs
              </outputDirectory>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <!-- 打包source文件为jar文件 -->
      <plugin>
        <artifactId>maven-source-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <attach>true</attach>
        </configuration>
        <executions>
          <execution>
            <phase>compile</phase>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.7</version>
        <configuration>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
          <encoding>UTF8</encoding>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <mainClass>com.lizhaoblog.Main</mainClass>
                </transformer>

                <transformer
                    implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                  <resource>META-INF/cxf/bus-extensions.txt</resource>
                </transformer>
                <transformer
                    implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                  <resource>META-INF/spring.handlers</resource>
                </transformer>
                <transformer
                    implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                  <resource>META-INF/spring.tooling</resource>
                </transformer>
                <transformer
                    implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                  <resource>META-INF/spring.schemas</resource>
                </transformer>

              </transformers>
              <!--<filters>-->
              <!--<filter>-->
              <!--<artifact>*:*</artifact>-->
              <!--<excludes>-->
              <!--<exclude>*.properties</exclude>-->
              <!--<exclude>*.xml</exclude>-->
              <!--</excludes>-->
              <!--</filter>-->
              <!--</filters>-->

            </configuration>
          </execution>
        </executions>
      </plugin>

    </plugins>

  </build>

写在后面