材料準備
- maven3.X 下載 :
http://maven.apache.org/download.cgi - Maven 私服倉庫地址:
https://www.sonatype.com/download-oss-sonatype
配置環(huán)境變量
如果是linux
vim etc/profile
export M2_HOME=/Users/chenhualong/Documents/dev_tool/apache-maven-3.0.5
export PATH=$PATH:$M2_HOME/bin/
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home
source etc/profile
配置path路徑
測試
配置公司單獨的私服倉庫
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://maven.XXXX.com:8081/nexus/content/groups/public/</url>
</mirror>
</mirrors>
在另外公司,用的下面這個劫樟。
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://repo.XXXXXX.net/repository/maven-public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
配置用戶組和權(quán)限
<server>
<!--releases 連接發(fā)布版本項目倉庫-->
<id>releases</id>
<!--訪問releases這個私服上的倉庫所用的賬戶和密碼-->
<username>admin</username>
<password>admin123</password>
</server>
<server>
<!--snapshots 連接測試版本項目倉庫-->
<id>snapshots</id>
<!--訪問releases這個私服上的倉庫所用的賬戶和密碼-->
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>maven-central</id>
<!--訪問releases這個私服上的倉庫所用的賬戶和密碼-->
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>maven-3rdParty</id>
<!--訪問releases這個私服上的倉庫所用的賬戶和密碼-->
<username>admin</username>
<password>admin123</password>
</server>
利用命令推送本地Jar包到私服
mvn deploy:deploy-file -DgroupId=tk.mybatis -DartifactId=mapper -Dversion=3.3.9 -Dpackaging=jar -Dfile=C:\Users\lemon\Desktop\tk\mybatis\mapper\3.3.9\mapper-3.3.9.jar -Durl=http://repo.XXXXXX.net/repository/maven-3rdParty/-DrepositoryId=maven-3rdParty
Maven的依賴返回
classpath 分為三種:編譯 classpath , 測試 classpath , 運行 classpath
Scope 選項如下:
Compile:編譯依賴范圍。默認就是 compile。在編譯掀虎,測試,運行都有效付枫;
Test:測試依賴范圍烹玉。僅測試有效; 例如 JUnit阐滩;
Provided:已提供依賴范圍二打。編譯,測試有效掂榔,運行時候無效继效。例如 servlet-api。
System:系統(tǒng)依賴范圍装获。(了解即可)使用 system 范圍的依賴必須通過 sytemPath 指定依賴文件的路徑瑞信。
Import:導入依賴范圍。(了解即可)使用 dependencyManagement 時候穴豫,可以導入依賴配置
利用idea構(gòu)建多模塊maven項目
* 新建maven,不要勾選任何的archetype.然后填寫artifactId和groupId喧伞。
* 刪除SRC目錄,只剩下pom文件即可。
* 新建module,然后通知不勾選任何的archetype潘鲫,自己構(gòu)建目錄即可翁逞。
* 例子中,首先加入moudle,這個順序需要注意溉仑,不然構(gòu)建會報錯挖函。
<!--子模塊-->
<modules>
<module>lemon-maven-module</module>
<module>lemon-maven-dao</module>
<module>lemon-maven-service</module>
<module>lemon-maven-web</module>
</modules>
<!--依賴父jar spring boot的相關(guān)包-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
其中,dao依賴module,service依賴dao,web依賴service. 在web層浊竟,我們新建run啟動方法怨喘,然后配置文件之類的寫在web層。
在啟動的時候振定,最好web必怜,把所有的module都依賴上,這樣就完全沒有問題后频。
多模塊項目打包
先配置web層的pom文件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
梳庆,就可以打出可執(zhí)行的包了。注意打包順序卑惜,被依賴的先打膏执。
[INFO] Reactor Summary:
[INFO]
[INFO] lemon-maven-parent ................................. SUCCESS [ 0.876 s]
[INFO] lemon-maven-module ................................. SUCCESS [ 0.755 s]
[INFO] lemon-maven-dao .................................... SUCCESS [ 0.087 s]
[INFO] lemon-maven-service ................................ SUCCESS [ 0.043 s]
[INFO] lemon-maven-web .................................... SUCCESS [ 0.444 s]
搭建maven私服
* 解壓私服程序 tar xzvf nexus-oss-webapp-1.8.0-bundle.tar.gz
* 啟動私服程序 ./nexus start
* 訪問私服 : http://host:8081/nexus
* 登陸: admin/admin123
* 點擊Repositories,選擇public reposotories,下方選擇configuration,選擇需要留下的組移動過去
* remote storage location 里面填寫; http://repo1.maven.org/maven2/
常用的maven插件
maven-jetty-plugin
輸入:mvn jetty:run。這將在端口為8080的Jetty服務器上啟動你的項目露久。Jetty將持續(xù)運行更米,直到插件是明確停止。例如毫痕,按下<ctrl-c>征峦,或使用mvn jetty:stop命令
<build>
<finalName>rop-sample</finalName>
<plugins>
<!-- jetty插件 -->
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.5</version>
<configuration>
<webAppSourceDirectory>src/main/webapp</webAppSourceDirectory>
<scanIntervalSeconds>3</scanIntervalSeconds>
<contextPath>/</contextPath>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>8088</port>
</connector>
</connectors>
</configuration>
</plugin>
</plugins>
</build>
maven-compiler-plugin 需要在編譯和生成的時候使用不同的jdk版本
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.6</source>
<target>1.7</target>
</configuration>
</plugin>
maven-war-plugin
打包war項目的時候排除某些web資源文件,這時就應該配置maven-war-plugin如下
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<webResources>
<resource>
<directory>src/main/webapp</directory>
<excludes>
<exclude>**/*.jpg</exclude>
</excludes>
</resource>
</webResources>
</configuration>
</plugin>
maven-source-plugin 生成源碼包
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.2</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
maven-javadoc-plugin 生成javadoc包<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.7</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
maven-assembly-plugin
它支持各種打包文件格式消请,包括zip栏笆、tar.gz、tar.bz2等等梯啤,通過一個打包描述文件(該例中是src/main/assembly.xml)竖伯,它能夠幫助用戶選擇具體打包哪些文件集合、依賴因宇、模塊七婴、和甚至本地倉庫文件,每個項的具體打包路徑用戶也能自由控制察滑。如下就是對應上述需求的打包描述文件src/main/assembly.xml
<assembly>
<id>bin</id>
<formats>
<format>zip</format>
</formats>
<dependencySets>
<dependencySet>
<useProjectArtifact>true</useProjectArtifact>
<outputDirectory>lib</outputDirectory>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<outputDirectory>/</outputDirectory>
<includes>
<include>README.txt</include>
</includes>
</fileSet>
<fileSet>
<directory>src/main/scripts</directory>
<outputDirectory>/bin</outputDirectory>
<includes>
<include>run.sh</include>
<include>run.bat</include>
</includes>
</fileSet>
</fileSets></assembly>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.1</version>
<configuration>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
maven-surefire-plugin 打包時跳過單元測試
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.16</version>
<configuration>
<forkMode>once</forkMode>
<argLine>-Dfile.encoding=UTF-8</argLine></plugin>