基于很多人不知道怎样打包成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 上跑,希望能帮到其他人。