1.使用maven-assembly-plugin打包,将项目所有依赖包打为一个jar,适用于自己测试,或者项目小。pom具体配置如下:
<build>
<!-- 设置jar包名称 -->
<finalName>${project.artifactId}-${version}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.5</version>
<configuration>
<archive>
<!-- 设置main方法 -->
<manifest>
<mainClass>wf.stu.job.JobTest</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<!-- 打包时,省略assembly:single 直接运行maven clean package-->
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
添加如上配置然后运行:mvn clean package就可以了;在target下会有如下jar:xxxxxx-jar-with-dependencies.jar。
这个jar包就可以直接 jar -jar xxxxxx-jar-with-dependencies.jar运行了
如果你有以下情况可以这么解决:
- jar包想后台运行:用这个命令nohup java -jar xxxxxx-jar-with-dependencies.jar &,在当前目录下会生成nohup.out文件,就是你项目的打印日志,如果想结束运行可以先通过命令ps -ef|grep nohup找到对应进程,然后用命令 kill -9 进程号。
- 想运行jar包中的其他main方法:用命令java -cp xxxxxx-jar-with-dependencies.jar stu.wf.MainTest(stu.wf.MainTest替换成你自己的main方法类路径)
- 项目中有配置文件在resource目录下,程序中要加载配置,用如下代码:
Properties properties = new Properties();
//job.properties 修改为你自己的配置文件名
InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("job.properties");
properties.load(inputStream);
2.需要项目 和项目依赖还有项目配置文件分离,便于维护,可以在pom配置如下内容:
<build>
<!-- 设置包名 -->
<finalName>${project.artifactId}-${version}</finalName>
<plugins>
<plugin>
<!-- 设置编译版本为jdk1.8 -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<!-- 将resource下的配置文件打到config目录下 -->
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<outputDirectory>${project.build.directory}/config/</outputDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</configuration>
</plugin>
<plugin>
<!-- 将依赖的jar包打到lib目录下 -->
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<!-- 执行jar默认运行的main方法 -->
<mainClass>stu.wf.job.JobTest</mainClass>
<!-- 由于前面将依赖jar放到lib下,所有这里设置前缀为lib/ -->
<classpathPrefix>lib/</classpathPrefix>
</manifest>
<manifestEntries>
<Class-Path>config/</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<!-- 将上述插件的输出打成一个tar.gz包 -->
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<!-- 打包时,省略assembly:single -->
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptors>
<!-- 引入assembly.xml -->
<descriptor>${basedir}/assembly.xml</descriptor>
</descriptors>
</configuration>
</plugin>
</plugins>
</build>
上面配置需要用到assembly.xml,在项目根目录下创建文件,内容如下:
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
<formats>
<!-- linux -->
<format>tar.gz</format>
<!-- windows -->
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>*.jar</include>
<include>lib/</include>
<include>config/</include>
</includes>
</fileSet>
<fileSet>
<directory>${project.build.directory}/bin</directory>
<outputDirectory>/bin</outputDirectory>
<includes>
<include>*.bat</include>
</includes>
<lineEnding>windows</lineEnding>
</fileSet>
<fileSet>
<directory>${project.build.directory}/bin</directory>
<outputDirectory>/bin</outputDirectory>
<includes>
<include>*.sh</include>
</includes>
<fileMode>0755</fileMode>
<lineEnding>unix</lineEnding>
</fileSet>
</fileSets>
</assembly>
最后运行 mvn clean package 在target目录下就有文件XXXX.tar.gz(.zip的时在windows系统运行),上次到你的服务器上,用tar -zxvf XXXX.tar.gz 解压包就可以了。