maven打包方式
使用maven打包插件maven-jar-plugin
在pom.xml
文件最后新增以下代码。
maven-dependency-plugin
是指将依赖的jar包复制到指定目录
maven-resources-plugin
将依赖的resources复制到指定目录
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <version>2.6</version>
- <configuration>
- <archive>
- <manifest>
- <!-- 是否依赖外部jar包 -->
- <addClasspath>true</addClasspath>
- <!-- 依赖外部jar包路径 -->
- <classpathPrefix>lib/</classpathPrefix>
- <!-- 启动函数 --> <mainClass>com.alibaba.dubbo.container.Main</mainClass>
- </manifest>
- </archive>
- <!-- 打包之后输出目录 -->
- <outputDirectory>${project.build.directory}/maven-archiver</outputDirectory>
- <!-- 剔除已打包的配置文件 -->
- <excludes>
- <exclude>*.*</exclude>
- <exclude>config/*</exclude>
- <exclude>config/tencent/*</exclude>
- <exclude>META-INF/spring/*</exclude>
- </excludes>
- </configuration>
- </plugin>
-
- <!-- 拷贝依赖的jar包到lib目录 -->
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <version>2.8</version>
- <executions>
- <execution>
- <id>copy-dependencies</id>
- <phase>package</phase>
- <goals>
- <goal>copy-dependencies</goal>
- </goals>
- <configuration>
- <outputDirectory>
- ${project.build.directory}/maven-archiver/lib
- </outputDirectory>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <!-- 拷贝依赖的资源文件包到resources目录 -->
- <plugin>
- <artifactId>maven-resources-plugin</artifactId>
- <executions>
- <execution>
- <id>copy-resources</id>
- <phase>package</phase>
- <goals>
- <goal>copy-resources</goal>
- </goals>
- <configuration>
- <outputDirectory>${project.build.directory}/maven-archiver/resources</outputDirectory>
- <resources>
- <resource>
- <directory>${basedir}/src/main/resources</directory>
- <filtering>true</filtering>
-
- </resource>
- </resources>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
运行jar包方式
打包之后的目录结构
包含了class文件,以及需要的配置文件信息(不包含excludes的配置文件)

在MANIFEST.MF
中包含了运行需要的信息
- Class-Path: lib/commons-beanutils-1.8.3.jar lib/commons-betwixt-0.8.jar
- ...
- Main-Class: com.alibaba.dubbo.container.Main
java -jar
启动命令
java -jar 执行命令时,会用到目录META-INFMANIFEST.MF中Main-Class的参数,这个是在打包的时候指定函数的入口。
- java -jar x-0.0.1-SNAPSHOT.jar
java -cp
启动命令
- java -cp .:x-0.0.1-SNAPSHOT.jar packname.mainclassname
因为我工程中需要引用外部的resources文件所以我通常用这种方式启动
配置文件地址是绝对路径
- java -cp /Users/username/resources:dubbo-service-1.0.jar com.alibaba.dubbo.container.Main
-cp
和-classpath
是相同的效果
java -cp 是指定运行所依赖其他类的路径,通常是类库、jar 包之类,多个依赖在Window
上用分号";"隔开,linux
上用":"隔开。
表达式支持通配符
- java -cp .:/Users/username/*.jar packname.mainclassname
打成一个jar包
如果需要将依赖的jar包都达到一个jar包中运行,可以使用maven-shade-plugin
这个插件。
这个插件的功能主要是:将依赖的jar包打包到当前jar包,并且在打包的时候把类重命名,可以解决jar包的多版本冲突,具体可以查询官方插件文档。
参考文档
maven官方插件文档
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。