特别实用的两种maven打包方式

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 解压包就可以了。

发布了42 篇原创文章 · 获赞 29 · 访问量 2525

猜你喜欢

转载自blog.csdn.net/qq_32314335/article/details/103785060
今日推荐