基于Maven構(gòu)建項(xiàng)目項(xiàng)目時(shí),有一些常見(jiàn)的命令是我們必須要熟練使用的最盅,包括:編譯突雪、打包(JAR)、部署等
配置Maven編譯時(shí)使用的JDK版本
使用Maven之前強(qiáng)烈建議手動(dòng)配置Maven編譯時(shí)實(shí)用的JDK版本涡贱,有時(shí)候你在Eclipse中指定了編譯器使用的JDK版本咏删,但是當(dāng)使用Maven進(jìn)行編譯時(shí)就是不通過(guò),可能就算兩者使用的編譯器JDK版本不一樣问词,
為了保險(xiǎn)起見(jiàn)督函,手動(dòng)在兩個(gè)地方指定配置:
- 找到Maven的安裝目錄下的conf目錄下的settings.xml文件,在其中的profiles節(jié)點(diǎn)下添加如下配置:
<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>
- 當(dāng)前項(xiàng)目的POM文件中,在plugins節(jié)點(diǎn)下添加如下配置:
<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>
當(dāng)然草穆,最好也將使用的IDE中的編譯器使用的JDK的版本和上面指定一樣,例如Eclipse中
多模塊的Maven項(xiàng)目打包
當(dāng)項(xiàng)目比較龐大時(shí)搓译,往往會(huì)將它分為幾個(gè)module悲柱,module之間可能存在依賴(lài),即一個(gè)module引用另一個(gè)module些己,例如A依賴(lài)B模塊豌鸡,則在A模塊的POM文件中會(huì)有如下聲明:
<dependency>
<groupId>com.xxx.xxx.common</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
此時(shí),在編譯A模塊的時(shí)候如果找不到B模塊段标,就會(huì)報(bào)錯(cuò)涯冠,可以將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
當(dāng)然蛇更,你也可以直接使用mvn install命令,maven會(huì)自動(dòng)將當(dāng)前目錄下的JAR添加至你的Repository中
此時(shí)會(huì)將common-1.0-SNAPSHOT.jar添加至你的本地Repository赛糟,就可以正確的引用并編譯了
Maven打包后的JAR找不到主類(lèi)
找到項(xiàng)目的POM文件派任,在build的plugins節(jié)點(diǎn)下添加如下配置,手動(dòng)指定主類(lèi):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<archive>
<manifest>
<mainClass>主類(lèi)所在的路徑</mainClass>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
Maven打包時(shí)包含或者不包含依賴(lài)的JAR
打包時(shí)不包含依賴(lài)的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>主類(lèi)所在的路徑</mainClass>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
但是璧南,需要將所依賴(lài)的JAR放在當(dāng)前JAR所在目錄lib目錄下掌逛,如果依賴(lài)的JAR比較多,可以使用命令進(jìn)行復(fù)制
mvn dependency:copy-dependencies -DoutputDirectory=D:/projects/xxx/dataServer/target/lib -DincludeScope=runtime
打包時(shí)包含所有依賴(lài)的JAR
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>主類(lèi)所在的路徑</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
然后使用命令mvn assembly:assembly進(jìn)行打包司倚,但是豆混,這樣打出來(lái)的JAR會(huì)很大很大