代碼語言:JavaScript代碼運行次數:0運行復制
export maven_OPTS="-Xms512m -Xmx1024m"
Windows:如下圖

(2) 用戶級別的maven配置
把MAVEN_HOME/conf/seettings.xml cp 到 ~/.m2/下,在.m2下的settings.xml中所作的配置就是用戶級別的配置,而直接編輯MAVEN_HOME/conf/seettings.xml所作的配置是全局的配置
2. 涉及的maven命令代碼語言:javascript代碼運行次數:0運行復制
[mvn -v]: 查看maven版本[mvn -h]: 查看幫助[mvn help:system]: 查看java的系統屬性和環境變量[mvn help:active-profiles]: 查看激活的profile[mvn help:all-profiles]: 列出所有的profile[mvn help:effective-pom]: 查看項目的所有pom元素(包括父元素中的默認配置)[mvn clean/compile/test/package/install/deploy]: maven的不同階段的命令,可以互相組合使用[mvn archetype:generate]: 創建項目骨架[mvn dependency:list]: 顯示項目中所有已解析依賴[mvn dependency:tree]: 查看當前項目的依賴樹[mvn dependency:analyze]: 分析項目依賴[mvn clean install-U]: 強制maven檢查更新[mvn help:describe -Dplugin=org.apache.maven.plugins:maven-source-plugin:3.0.1 -Ddetail]: 查看某插件的詳細信息[mvn help:describe -Dplugin=source]: 上一個命令的簡寫[mvn help:describe -Dplugin=compile -Dgoal=compile]: 只查看goal相關的信息[mvn install -Dmaven.test.skip=true]: 構建時跳過測試(不編譯測試代碼,不運行測試代碼)[mvn package -DskipTests]: 構建時跳過測試(編譯測試代碼,不運行測試代碼)[mvn clean install -pl module1,module2]: 構建指定的模塊[mvn clean install -pl module -am]: 構建指定模塊及其依賴的模塊[mvn clean install -pl module -amd]: 構建指定模塊及依賴其的模塊[mvn clean install -rf module]: 在完整的反應堆構建順序基礎上指定從哪個模塊開始構建[mvn clean install -pl module1 -amd -rf module2]: 構建module1以及依賴其的模塊,并且從module2開始構建[mvn clean install -P dev]: 激活id為dev的profile[mvn clean install -P profile1,profile2]: 激活多個profile[mvn clean install -Dkey=value]: 設置系統屬性值[mvn test -Dtest=A]: 測試A類[mvn test -Dtest=A*B]: 測試以A開頭B結尾的類[mvn test -Dtest=A,B]: 測試A類和B類[mvn test -Dtest=A*B,C]: 測試以A開頭B結尾的類以及C類[mvn test -Dtest -DfailIfNoTests=false]: 即使沒有運行測試也不要報錯[mvn cobertura:cobertura]: 生成測試覆蓋率報告,文件為target/site/cobertura/index.html[mvn jetty:run]: 使用jetty-maven-plugin進行測試[mvn jetty:run -Djetty.port=9999]: 啟動jetty服務進行測試,并指定端口號[mvn cargo:start]: 發布war包到本地服務器[mvn cargo:deploy]: 發布war包到遠程服務器[mvn release:clean]: 發布新版本前clean[mvn release:prepare]: 發布新版本前的準備工作[mvn release:prepare -DautoVersionSubmodules=true]: 子模塊與父模塊使用相同的版本[mvn release:rollback]: prepare后如果發現錯誤,可以回滾[mvn release:perform]: 發布新版本[mvn release:branch -DbranchName=0.0.1 -DupdateBranchVersions=true -DupdateWorkingCopyVersions=false]: 創建分支,分支使用新版本,不更新主干(trunk)的代碼[mvn clean deploy -Dgpg.passphrase=passwd]: 發布已經簽名的構件[mvn gpg:sign-and-deploy-file -DgroupId=com.bonc.rdpe -DartifactId=maven001 -Dversion=0.0.1-SNAPSHOT -Dpomfile=target/maven001-0.0.1-SNAPSHOT.pom -Dfile=target/maven001-0.0.1-SNAPSHOT.jar -Durl=http://192.168.138.129:8081/repository/maven-snapshots/ -DrepositoryId=nexus-snapshots]: 發布沒有簽名的文件并對其簽名[mvn site]: 生成站點[mvn site:stage -DstagingDirectory=D:tmp]: 把站點預發布到某個臨時文件夾下
3. settings.xml文件內容總結代碼語言:javascript代碼運行次數:0運行復制
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"><!--自定義本地倉庫路徑 --><localrepository>path/to/maven/repo</localrepository><!-- maven是否與用戶交互 --><interactivemode>true</interactivemode><!-- 離線模式 --><offline>false</offline><!-- 設置自定義的解析插件元數據的地址,主要用于得到插件的前綴,簡化mvn命令 --><plugingroups><!-- 當插件的groupId為org.apache.maven.plugins和org.codehaus.mojo時 插件的命令支持簡寫的形式,例如: mvn help:system 其他插件如果你想要使用簡寫的命令,需要在這里聲明該插件的groupId 這里聲明了jetty-maven-plugin的groupId,所以你可以簡寫該插件的命令,例如: mvn jetty:run 如果不聲明,完整的命令是這樣的: mvn jetty:run -Dplugin=org.mortbay.jetty:jetty-maven-plugin:8.1.16.v20140903 --><plugingroup>org.eclipse.jetty</plugingroup><plugingroup>com.your.plugins</plugingroup></plugingroups><!-- 設置HTTP代理 --><proxies><proxy><id>dev3-proxy</id><active>true</active><protocol>http</protocol><username>root</username><password>root</password><host>172.16.13.185</host><port>9999</port><nonproxyhosts>https://repo.maven.apache.org/maven2|*.google.com</nonproxyhosts></proxy></proxies><!-- 配置倉庫的認證信息 --><servers><server><id>nexus-releases</id><username>hadoop</username><password>hadoop</password></server><server><id>nexus-snapshot</id><username>hadoop</username><password>hadoop</password></server></servers><mirrors><!-- 配置遠程倉庫的鏡像:這是一個私服 --><mirror><id>Public Repositories</id><name>Public Repositories</name><!-- * 代表這個私服可以作為所有遠程倉庫的鏡像 --><mirrorof>*</mirrorof><!-- <mirrorOf>external:*</mirrorOf> : 匹配所有不在本機上的遠程倉庫 <mirrorOf>repo1,repo2</mirrorOf> : 只匹配repo1和repo2這兩個倉庫 <mirrorOf>*,!repo1</mirrorOf> : 匹配除了repo1之外的所有遠程倉庫 --><url>http://172.16.13.185:9000/nexus/content/groups/public/</url></mirror><!-- 阿里云的鏡像 --><mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorof>central</mirrorof></mirror></mirrors><!-- 自定義的配置 --><profiles><!-- 激活方式1: 默認激活 --><!-- 設置maven編譯時的jdk版本 --><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><!-- 激活方式2: 在activeProfiles中激活 --><!-- 這是一個自定義的數據庫配置 --><profile><id>profile1</id><properties><db.driver>com.mysql.jdbc.Driver</db.driver><db.url>jdbc:mysql://192.168.138.101:3306/test</db.url><db.username>dev</db.username><db.password>dev-pwd</db.password></properties></profile><!--激活方式3: 當系統屬性的值為指定值時激活--><!-- 下面這個profile在系統屬性(one.of.system.property)為指定值(expected.value)時被激活 你可以在命令行設置系統屬性值: mvn clean install -Done.of.system.property=expected.value --><profile><id>profile2</id><activation><property><name>one.of.system.property</name><value>expected.value</value></property></activation><properties><!-- ...... --></properties></profile><!-- 激活方式4: 根據操作系統的環境激活 --><profile><id>profile3</id><activation><os><name>Windows 10</name><family>Windows</family><arch>amd64</arch><version>10.0</version></os></activation><properties><!-- ...... --></properties></profile><!-- 激活方式5: 基于文件存在與否激活: x.properties存在激活,y.properties不存在激活 --><profile><id>profile4</id><activation><file><exists>x.properties</exists><missing>y.properties</missing></file></activation><properties><!-- ...... --></properties></profile><!-- 說明: 1. 如果有任意一個profile通過非默認的方式激活了,那么默認激活的profile就會失效 2. 在settings.xml中設置的profile不允許修改大部分pom元素,比如聲明依賴或修改插件,而在項目中pom.xml中的profile中,可以修改pom原始的配置,比如maven的那些默認路徑配置 --></profiles><!-- 激活已經配置的profile --><activeprofiles><activeprofile>dev</activeprofile></activeprofiles></settings>
4. pom.xml文件內容總結代碼語言:javascript代碼運行次數:0運行復制
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelversion>4.0.0</modelversion><groupid>com.bonc.rdpe</groupid><artifactid>maven001</artifactid><version>0.0.1-SNAPSHOT</version><!-- 打包類型為jar,默認為jar,web項目應該是war,其他還有: maven-plugin/ear/pom等 --><packaging>jar</packaging><!--附屬構件,不能直接定義 --><classifier></classifier><name>maven001</name><!-- 自定義maven屬性 --><properties><hadoop.version>2.7.6</hadoop.version><junit.version>4.7</junit.version><spark.version>2.3.0</spark.version><springframework.version>2.5.6</springframework.version></properties><repositories><!-- maven中央倉庫,不需要配置,這里是為了說明各配置的功能 --><repository><!-- id值必須唯一,否則會覆蓋 --><id>central</id><name>Central Repository</name><url>https://repo.maven.apache.org/maven2</url><layout>default</layout><releases><!-- 下載發布版構件 --><enabled>true</enabled><!-- Maven 從遠程倉庫更新的頻率 never(從不) daily(每天一次,默認) always(每次構建都檢查更新) interval:X(每隔X分鐘檢查一次,X為任意整數) --><updatepolicy>never</updatepolicy><!-- 檢驗文件的策略,如果校驗失敗: warn(默認):輸出警告信息 fail: 構建失敗) ignore: 忽略 --><checksumpolicy>warn</checksumpolicy></releases><snapshots><!-- 不從中央倉庫下載快照版本的構件 --><enabled>false</enabled></snapshots></repository><!-- JBOSS Maven 倉庫 --></repositories><!-- 配置下載插件的遠程倉庫,各配置和repositories中的意義是一樣的 --><pluginrepositories><pluginrepository><id></id><name></name><url></url><layout></layout><releases><updatepolicy></updatepolicy></releases><snapshots><enabled></enabled></snapshots></pluginrepository></pluginrepositories><!-- 項目輸出的構件部署的遠程倉庫 --><distributionmanagement><!-- 發布版的構件部署的倉庫 --><repository><id>dev3-repository</id><name>Dev3 Release Repository</name><url>http://172.16.13.185:9000/nexus/content/repositories/releases/</url></repository><!-- 快照版的構件部署的倉庫 --><snapshotrepository><id>dev3-snapshots-repository</id><name>Dev3 Snapshot Repository</name><url>http://172.16.13.185:9000/nexus/content/repositories/snapshots/</url></snapshotrepository></distributionmanagement><!-- 在這里聲明的依賴會被子模塊繼承,但是,不是聲明了就一定會被繼承,如果子模塊不引入這些依賴,就不會強制加給子模塊 --><dependencymanagement><dependencies><dependency><groupid>org.springframework</groupid><artifactid>spring-core</artifactid><version>${springframework.version}</version></dependency><dependency><groupid>org.springframework</groupid><artifactid>spring-beans</artifactid><version>${springframework.version}</version></dependency><dependency><groupid>org.springframework</groupid><artifactid>spring-context</artifactid><version>${springframework.version}</version></dependency><dependency><groupid>org.springframework</groupid><artifactid>spring-context-support</artifactid><version>${springframework.version}</version></dependency><dependency><groupid>junit</groupid><artifactid>junit</artifactid><version>${junit.version}</version><scope>test</scope></dependency><!-- 合并其他maven工程中的dependencyManagement下定義的依賴到本模塊的dependencyManagement下 --><dependency><groupid>com.bonc.rdpe</groupid><artifactid>account-xxx</artifactid><version>0.0.1-SNAPSHOT</version><!--import 只能用在dependencyManagement中,且目標POM的packaging必須為pom,這里的type也只能為pom--><type>pom</type><scope>import</scope></dependency></dependencies></dependencymanagement><!-- 本模塊使用的構件 --><dependencies><dependency><groupid>org.apache.spark</groupid><artifactid>spark-sql_2.11</artifactid><version>${spark.version}</version><!-- 依賴類型,默認是jar,而且絕大部分為jar,不需要配置 --><type>jar</type><!-- 依賴范圍,默認compile,可以是test/provided/runtime/system,當為system時需要systemPath指定jar包路徑--><scope>system</scope><systempath>${JAVA_HOME}/lib/rt.jar</systempath><!-- 是否可選,默認false,如果是ture,則當其他項目依賴此項目時,其他項目不會依賴這個jar包,不建議在項目中使用可選依賴 --><optional>true</optional><exclusions><!--排除掉spark-sql_2.11-2.3.0.jar依賴的hadoop-client-x.x.x.jar --><exclusion><groupid>org.apache.hadoop</groupid><artifactid>hadoop-client</artifactid></exclusion></exclusions></dependency><!-- 排除掉spark-sql依賴的jar后,需要手動添加項目需要的版本的hadoop-client包 --><dependency><groupid>org.apache.hadoop</groupid><artifactid>hadoop-client</artifactid><version>${hadoop.version}</version></dependency></dependencies><!-- maven工程需要的額外配置 --><!-- 以下例子為: 配置了兩套不同的數據庫環境 開發人員和測試人員使用時可以根據自己的角色激活對應profile --><profiles><profile><id>dev</id><properties><db.driver>com.mysql.jdbc.Driver</db.driver><db.url>jdbc:mysql://192.168.138.101:3306/dev</db.url><db.username>dev</db.username><db.password>dev-pwd</db.password></properties></profile><profile><id>dev</id><properties><db.driver>com.mysql.jdbc.Driver</db.driver><db.url>jdbc:mysql://192.168.138.101:3306/test</db.url><db.username>test</db.username><db.password>test-pwd</db.password></properties></profile></profiles><build><!-- 在這里聲明的插件會被子模塊繼承 --><pluginmanagement><plugins><plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-compiler-plugin</artifactid><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-resources-plugin</artifactid><configuration><encoding>UTF-8</encoding></configuration></plugin></plugins></pluginmanagement><plugins><!-- 以下是一些maven的默認路徑配置,你可以自定義,但不建議 --><!-- 主輸出目錄 --><directory>${project.basedir}/target</directory><!-- 主代碼輸出目錄 --><outputdirectory>${project.build.directory}/classes</outputdirectory><!-- 最終構建的名稱格式 --><finalname>${project.artifactId}-${project.version}</finalname><!-- 測試代碼輸出目錄 --><testoutputdirectory>${project.build.directory}/test-classes</testoutputdirectory><!-- 主源碼目錄 --><sourcedirectory>${project.basedir}/src/main/java</sourcedirectory><!-- 腳本源碼目錄 --><scriptsourcedirectory>src/main/scripts</scriptsourcedirectory><!-- 測試源碼目錄 --><testsourcedirectory>${project.basedir}/src/test/java</testsourcedirectory><!-- 主資源目錄 --><resources><resource><directory>${project.basedir}/src/main/resources</directory><!-- 開啟資源過濾,作用: 開啟后,資源目錄下的配置為文件中就可以識別profile中定義的maven屬性 --><filtering>true</filtering></resource></resources><!-- 測試資源目錄 --><testresources><testresource><directory>${project.basedir}/src/test/resources</directory><filtering>true</filtering></testresource></testresources><!-- maven編譯插件 --><plugin><!-- 如果插件的groupId=org.apache.maven.plugins,可以省略 --><groupid>org.apache.maven.plugins</groupid><artifactid>maven-compiler-plugin</artifactid><!-- 如果沒有設置插件版本,maven會獲取最新的發布版 --><configuration><source>1.8</source><target>1.8</target><!-- 是否跳過測試代碼的編譯,默認為false,不建議設置為true --><skip>true</skip></configuration></plugin><!-- maven源碼生成插件 --><plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-source-plugin</artifactid><!-- 對于自定義綁定的插件,建議手動指定一個非快照的版本 --><version>3.0.1</version><executions><!-- 每個execution用來配置一個任務 --><execution><id>attach-source</id><!-- 綁定到default生命周期的verify階段 --><phase>verify</phase><!-- 任務目標 --><goals><goal>jar-no-fork</goal></goals></execution></executions></plugin><!-- maven打包插件: 相對于默認的maven-jar-plugin,這個插件打的包是可執行的 --><plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-shade-plugin</artifactid><version>3.1.1</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><transformers><!--設置主類--><transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainclass>com.bonc.rdpe.maven001.HelloWorld</mainclass></transformer></transformers></configuration></execution></executions></plugin><!-- maven默認的打包插件 --><plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-jar-plugin</artifactid><version>3.1.0</version><executions><execution><goals><!-- 設置打包的時候把測試代碼也打包,默認為jar(即只打包主代碼) --><goal>test-jar</goal></goals></execution></executions></plugin><!-- web項目打包插件 --><plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-war-plugin</artifactid><version>3.2.2</version><configuration><webresources><webresource><directory>src/main/webapp</directory><filtering>true</filtering><!-- 所有的css文件和js文件或被打到war包中 --><includes><include>**/*.css</include><include>**/*.js</include></includes></webresource></webresources></configuration></plugin><!-- maven測試插件 --><plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-surefire-plugin</artifactid><version>2.22.0</version><configuration><!-- 修改了測試報告的存放為位置,默認為${project.build.directory}/surefire-reports --><reportsdirectory>${project.build.directory} est-reports</reportsdirectory><!-- 是否跳過測試代碼的運行,默認為false,不建議設置為true --><skiptests>true</skiptests><!-- 默認情況下,maven會測試以Test開頭和結尾、以TestCase結尾的類 你可以設置讓maven測試不符合測試類命名規范的類 **/*Tests.java: 測試任意路徑下的以Tests結尾的類 --><includes><include>**/*Tests.java</include></includes><!-- 當然,也可以設置排除掉一些測試類 **/*ServiceTest.java: 任意路徑下的ServiceTest結尾的類都不會測試 **/ArrayTest.java: 任意路徑下的ArrayTest這個類都不會被測試 --><excludes><exclude>**/*ServiceTest.java</exclude><exclude>**/ArrayTest.java</exclude></excludes><!-- 可以在外部自定義的xml文件來設置測試哪些類,這里的配置用來聲明該外部文件的位置 這個功能需要使用TestNG這個jar包,而不是JUnit --><suitexmlfiles><suitexmlfile>testng.xml</suitexmlfile></suitexmlfiles><!-- @Test方法可以聲明其屬于哪個組,這個設置測試哪些組中的方法,例如 @Test(groups = {"group1"}) public void testXXX() {...} 這個功能需要使用TestNG這個jar包,而不是JUnit --><groups>group1</groups></configuration></plugin></plugins></build></project>
5. 超級pom代碼語言:javascript代碼運行次數:0運行復制
<?xml version="1.0" encoding="UTF-8"?><project><modelversion>4.0.0</modelversion><repositories><repository><id>central</id><name>Central Repository</name><url>https://repo.maven.apache.org/maven2</url><layout>default</layout><snapshots><enabled>false</enabled></snapshots></repository></repositories><pluginrepositories><pluginrepository><id>central</id><name>Central Repository</name><url>https://repo.maven.apache.org/maven2</url><layout>default</layout><snapshots><enabled>false</enabled></snapshots><releases><updatepolicy>never</updatepolicy></releases></pluginrepository></pluginrepositories><build><directory>${project.basedir}/target</directory><outputdirectory>${project.build.directory}/classes</outputdirectory><finalname>${project.artifactId}-${project.version}</finalname><testoutputdirectory>${project.build.directory}/test-classes</testoutputdirectory><sourcedirectory>${project.basedir}/src/main/java</sourcedirectory><scriptsourcedirectory>${project.basedir}/src/main/scripts</scriptsourcedirectory><testsourcedirectory>${project.basedir}/src/test/java</testsourcedirectory><resources><resource><directory>${project.basedir}/src/main/resources</directory></resource></resources><testresources><testresource><directory>${project.basedir}/src/test/resources</directory></testresource></testresources><pluginmanagement><plugins><plugin><artifactid>maven-antrun-plugin</artifactid><version>1.3</version></plugin><plugin><artifactid>maven-assembly-plugin</artifactid><version>2.2-beta-5</version></plugin><plugin><artifactid>maven-dependency-plugin</artifactid><version>2.8</version></plugin><plugin><artifactid>maven-release-plugin</artifactid><version>2.5.3</version></plugin></plugins></pluginmanagement></build><reporting><outputdirectory>${project.build.directory}/site</outputdirectory></reporting><profiles><profile><id>release-profile</id><activation><property><name>performRelease</name><value>true</value></property></activation><build><plugins><plugin><inherited>true</inherited><artifactid>maven-source-plugin</artifactid><executions><execution><id>attach-sources</id><goals><goal>jar</goal></goals></execution></executions></plugin><plugin><inherited>true</inherited><artifactid>maven-javadoc-plugin</artifactid><executions><execution><id>attach-javadocs</id><goals><goal>jar</goal></goals></execution></executions></plugin><plugin><inherited>true</inherited><artifactid>maven-deploy-plugin</artifactid><configuration><updatereleaseinfo>true</updatereleaseinfo></configuration></plugin></plugins></build></profile></profiles></project>