jfinal 打包成jar运行


基于很多人不知道怎样打包成jar直接运行

今晚来总结一下:

采用assembly 目录如下:

 ---bin {start.sh;stop.sh}

 ---config

 ---webapp

 ---lib


assembly:

<assembly>
    <id>${project.version}</id>
    <formats>
        <format>tar.gz</format>
    </formats>
    <baseDirectory>${project.artifactId}-${project.version}</baseDirectory>
    <includeBaseDirectory>false</includeBaseDirectory>

    <fileSets>

        <fileSet>
            <directory>target/classes</directory>
            <outputDirectory>/config</outputDirectory>
            <includes>
                <include>*.properties</include>
                <include>*.yml</include>
                <include>*.xml</include>
                <include>*.png</include>
                <!-- <include>log4j.xml</include> -->
            </includes>
            <fileMode>0644</fileMode>
        </fileSet>



        <fileSet>
            <directory>src/main/assembly/bin</directory>
            <outputDirectory>bin</outputDirectory>
            <fileMode>0755</fileMode>
        </fileSet>

        <fileSet>
            <directory>src/main/assembly/config</directory>
            <outputDirectory>config</outputDirectory>
            <fileMode>0644</fileMode>
        </fileSet>

        <fileSet>
            <directory>src/main/webapp</directory>
            <outputDirectory>webapp</outputDirectory>
            <fileMode>0644</fileMode>
        </fileSet>


        <fileSet>
            <directory>target</directory>
            <outputDirectory>lib</outputDirectory>
            <includes>
                <include>*.jar</include>
            </includes>
        </fileSet>


        <fileSet>
            <directory>${project.build.directory}</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>*.jar</include>
            </includes>
        </fileSet>

    </fileSets>

    <dependencySets>
        <dependencySet>
            <outputDirectory>lib</outputDirectory>
        </dependencySet>
    </dependencySets>
</assembly>


记得把war 改为jar

<plugin>
         <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-jar-plugin

-->
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-jar-plugin</artifactId>
         <version>3.1.0</version>

         <configuration>
            <classesDirectory>target/classes/</classesDirectory>
            <archive>
               <addMavenDescriptor>false</addMavenDescriptor>
               <manifest>
                  <addClasspath>true</addClasspath>
                  <mainClass>com.jfinal.club.StartService</mainClass>
                  <addClasspath>true</addClasspath>
                  <classpathPrefix>lib/</classpathPrefix>
               </manifest>
               <manifestEntries>
                  <Class-Path>./</Class-Path>
               </manifestEntries>
            </archive>
            <excludes>
               <exclude>**/*.properties</exclude>
               <exclude>**/*.yml</exclude>
               <exclude>**/*.xml</exclude>
            </excludes>
         </configuration>
      </plugin>


      <plugin>
         <artifactId>maven-assembly-plugin</artifactId>
         <version>3.0.0</version>
         <configuration>
            <appendAssemblyId>false</appendAssemblyId>
            <archive>
               <manifest>
                  <addClasspath>true</addClasspath>
                  <mainClass>com.jfinal.club.StartService</mainClass>
               </manifest>
            </archive>
            <descriptors>
               <descriptor>src/main/assembly/assembly.xml</descriptor>
            </descriptors>
         </configuration>
         <executions>
            <execution>
               <id>make-assembly</id>
               <phase>package</phase>
               <goals>
                  <goal>single</goal>
               </goals>
            </execution>
         </executions>
      </plugin>
   </plugins>
</build>


程序入口:


public static void main(String[] args) {
    /**
     * 特别注意:IDEA 之下建议的启动方式,仅比 eclipse 之下少了最后一个参数
     */
    String baseBath = String.valueOf(StartService.class.getProtectionDomain().getCodeSource().getLocation());
    String classPath, webRootPath, jarPath;
    if (StrKit.notBlank(baseBath) && baseBath.contains("file:/")) {
        // 获取运行操作系统的运行方式  window和linux的细微区别
        boolean windows = System.getProperties().getProperty("os.name").contains("Windows");
        System.out.println(System.getProperties().getProperty("os.name"));
        jarPath = (windows ? "" : "/") + baseBath.substring("file:/".length());
        classPath = (windows ? "" : "/") + jarPath.substring(0, jarPath.lastIndexOf("/")) + "/webapp";
        System.out.println("jarPath:" + jarPath);
        System.out.println("classPath:" + classPath);
        webRootPath = classPath;
       // ZipUtil.unzip(jarPath, classPath);
        // 这两步是核心指定 webapp目录和classpath目录
        PathKit.setWebRootPath(webRootPath);
        PathKit.setRootClassPath(classPath);
        // eclipse 启动是4个参数
        JFinal.start(webRootPath, 8009, "/");
    } else {
        throw new RuntimeException("扑街路径不对!");
    }
}

这里感谢:http://www.jfinal.com/share/422 

mac 跑是没有问题,没有试过win 上跑,希望能帮到其他人。


评论区

elstar

2018-10-10 14:01

没太看明白,assembly是什么。idea上怎么操作打成jar?

hunniman

2018-10-15 19:46

@elstar 一个maven插件啦

热门分享

扫码入社