今天這個算是學習Maven的一個收尾文章,裏面內容不侷限於標題中提到的,後面還加上了公司實際使用的根據profile配置項目環境以及公司如今用的archetype 模板等例子。java
後面還會總結一個大的思惟導圖記錄下本身學習的歸納。mysql
先來複習幾個命令:git
mvn有三套徹底獨立的生命週期,clean、default和site
每套生命週期都會包含多個phase,每一個phase又是由各類插件的goal來完成的。web
phase能夠理解爲任務單元,生命週期是總任務,phase就是總任務分出來的一個個子任務,可是這些子任務是被規格化的,它能夠同時被多個生命週期所包含,一個生命週期包含多個phase,phsse的執行時順序的,一個phase能夠綁定多個goal,至少一個。spring
goal是執行任務最小的單元,它能夠綁定到任意的phase中,一個phase有一個或多個goal,goal也是按順序執行的,一個phase被執行時,綁定到phase裏的goal會按綁定的時間被順序執行。sql
clean的生命週期包含的phase以下:shell
default的生命週期包含的phase以下:數據庫
site生命週期的phaseapi
### 默認的phase和pluginmybatis
咱們直接運行mvn clean package的時候,每一個phase都是由插件goal來完成的,phase和plugin綁定的關係是什麼了?
實際上,默認maven就綁定了一些plugin goal到phase上,好比:
相似於resources:resources這種格式,說的就是resources這個plugin的resources goal(resources功能,負責處理資源文件)
好比咱們執行mvn clean package生命週期是什麼樣的?
clean是指的clean生命週期中的clean phase
package是指default生命週期中的package phase
此時就會執行clean生命週期中在clean phase以前的全部phase和clean phase(pre-clean、clean)
同事執行default生命週期中在package phase以前的全部phase和package phase
clean默認綁定的是clean:clean, clean plugin的clean goal,因此就會去執行clean插件的clean goal。
具體執行流程以下圖:
需求:項目中有mybatis 自動生成代碼,但願執行某些maven命令能夠自動根據指定的表設置 生成對應代碼。
添加mybatis.generator的plugin,而後配置generate goal
<build> <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version> <configuration> <configurationFile>mybatis-generator-config.xml</configurationFile> <verbose>true</verbose> <overwrite>true</overwrite> </configuration> <executions> <execution> <id>Generate MyBatis Artifacts</id> <goals> <goal>generate</goal> </goals> </execution> </executions> <dependencies> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql-connector.version}</version> </dependency> <dependency> <groupId>com.wangmeng.game</groupId> <artifactId>game-wangmeng-common</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> </plugin> </plugins> </build>
再看看mybatis-generator-config.xml配置的sql信息:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" > <generatorConfiguration> <context id="context" targetRuntime="MyBatis3"> <plugin type="org.mybatis.plugin.PaginationPlugin"> </plugin> <commentGenerator> <property name="suppressAllComments" value="false"/> <property name="suppressDate" value="true"/> </commentGenerator> <!-- 數據庫的相關配置 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://ip:3306/db?useUnicode=true" userId="root" password=""/> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!-- 實體類生成的位置 --> <javaModelGenerator targetPackage="com.wangmeng.game.league.entity" targetProject="game-wangmeng-entity/src/main/java"> <property name="enableSubPackages" value="false"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <!-- *Mapper.xml 文件的位置 --> <sqlMapGenerator targetPackage="mapper" targetProject="game-wangmeng-dao/src/main/resources"> <property name="enableSubPackages" value="false"/> </sqlMapGenerator> <!-- Mapper 接口文件的位置 --> <javaClientGenerator targetPackage="com.wangmeng.game.league.dao" targetProject="game-wangmeng-dao/src/main/java" type="XMLMAPPER"> <property name="enableSubPackages" value="false"/> </javaClientGenerator> <!-- 相關表的配置 --> <table tableName="t_table" domainObjectName="TableEntity" enableCountByExample="true" enableDeleteByExample="true" enableSelectByExample="true" enableUpdateByExample="true"> <generatedKey column="id" sqlStatement="MySql" identity="true"/> </table> </context> </generatorConfiguration>
咱們能夠在idea maven中看到咱們配置好的plugin了,而後點擊執行便可:
plugin:mybatis-generator
goal:generate
<profiles> <profile> <!--local env--> <id>dev</id> <properties> <profiles.active>dev</profiles.active> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <!--test env--> <id>test</id> <properties> <profiles.active>test</profiles.active> </properties> </profile> <profile> <!--UT env--> <id>ut</id> <properties> <profiles.active>ut</profiles.active> </properties> </profile> </profiles>
這裏默認使用的是dev環境,經過<activation>
配置的。
一圖流:
artchetype其實就是個maven項目模板
拿一個咱們公司如今用的東西舉例,當咱們建立一個全新的項目時,不可能再從新new一個全新的maven項目了,公司其實早就爲咱們提供了項目生成的腳手架,只須要執行一段maven命令便可生成好一個全新的項目,項目結構在這裏都是給定義好了的。
這樣的好處一是方便咱們建立項目,二是方便公司規範的執行和管理。
這裏直接拿公司的一個artchetype的一個模板來演示(關鍵信息已經馬賽克)
1,本身能夠選擇生成一個maven archetype quickstart或者maven archetype webapp項目
而後用mvn deploy 便可把archetype jar包上傳到maven私服
2,使用自定義的maven archetype
公司裏面是直接封裝了一個bat可執行文件,執行方式爲
cmd到CreateProject-latest.bat目錄,執行命令CreateProject-latest.bat 項目名 包名,如CreateProject-latest.bat shop-report report 便可使用最新版本的腳手架生成工程 xx-spring-cloud-api-shop-report,包名爲com.xx.report。把項目copy到你的喜歡的地址,再導入到eclipse或idea中便可。請手動添加gitignore。請修改父項目版本爲最新的release版本。
CreateProject-latest.bat
echo on & color 0A setlocal enabledelayedexpansion if "%1"=="" goto BLANK if "%2"=="" goto BLANK set ProjectName=%1 set packageName=%2 set archetypeVersion=LATEST mvn dependency:copy -Dartifact=com.xx:xx-archetype-springcloud-archetype:%archetypeVersion% -Dmdep.stripVerison=true & echo Y | mvn archetype:generate -DarchetypeCatalog=local -DarchetypeGroupId=com.tuhu -DarchetypeArtifactId=xx-archetype-springcloud-archetype -DarchetypeVersion=%archetypeVersion% -DgroupId=com.tuhu -DartifactId=%ProjectName% -Dversion=0.0.1-SNAPSHOT -Dpackage=com.xx.%packageName% & rd/s/q ${project.basedir} & rd/s/q %ProjectName%\.idea & ren %ProjectName% xx-spring-cloud-api-%ProjectName%
感興趣的小夥伴可關注我的公衆號:壹枝花算不算浪漫