基于Maven构建项目项目时,有一些常见的命令是我们必须要熟练使用的,包括:编译、打包(JAR)、部署等
配置Maven编译时使用的JDK版本
使用Maven之前强烈建议手动配置Maven编译时实用的JDK版本,有时候你在Eclipse中指定了编译器使用的JDK版本,但是当使用Maven进行编译时就是不通过,可能就算两者使用的编译器JDK版本不一样,
为了保险起见,手动在两个地方指定配置:
- 找到Maven的安装目录下的conf目录下的settings.xml文件,在其中的profiles节点下添加如下配置:
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
- 当前项目的POM文件中,在plugins节点下添加如下配置:
<plugin>
<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>
或则,在属性properties中指定
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
当然,最好也将使用的IDE中的编译器使用的JDK的版本和上面指定一样,例如Eclipse中

image.png
多模块的Maven项目打包
当项目比较庞大时,往往会将它分为几个module,module之间可能存在依赖,即一个module引用另一个module,例如A依赖B模块,则在A模块的POM文件中会有如下声明:
<dependency>
<groupId>com.xxx.xxx.common</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
此时,在编译A模块的时候如果找不到B模块,就会报错,可以将B模块的JAR安装在本地Repository中,也就是使用mvn intsall命令,例如:
mvn install:install-file -Dfile=D:/projects/xxx/target/common-1.0-SNAPSHOT.jar -DgroupId=com.xxx.xxx.common -DartifactId=common -Dversion=1.-SNAPSHOT -Dpackaging=jar
当然,你也可以直接使用mvn install命令,maven会自动将当前目录下的JAR添加至你的Repository中
此时会将common-1.0-SNAPSHOT.jar添加至你的本地Repository,就可以正确的引用并编译了
Maven打包后的JAR找不到主类
找到项目的POM文件,在build的plugins节点下添加如下配置,手动指定主类:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<archive>
<manifest>
<mainClass>主类所在的路径</mainClass>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
Maven打包时包含或者不包含依赖的JAR
打包时不包含依赖的JAR
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<archive>
<manifest>
<mainClass>主类所在的路径</mainClass>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
但是,需要将所依赖的JAR放在当前JAR所在目录lib目录下,如果依赖的JAR比较多,可以使用命令进行复制
mvn dependency:copy-dependencies -DoutputDirectory=D:/projects/xxx/dataServer/target/lib -DincludeScope=runtime
打包时包含所有依赖的JAR
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>主类所在的路径</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
然后使用命令mvn assembly:assembly进行打包,但是,这样打出来的JAR会很大很大