您好,登錄后才能下訂單哦!
這篇文章主要講解了“Maven的使用方法有哪些”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Maven的使用方法有哪些”吧!
此文檔主要說明Maven的基礎(chǔ)使用方式,以及在使用過程過程中需要遵守哪些默認(rèn)的準(zhǔn)則。
我們工作中會經(jīng)常寫maven的配置,但是很多maven使用細(xì)節(jié)你可能并不知道,但你掌握后使用maven會更加上手。
Apache Maven是一個軟件項目管理工具?;陧椖繉ο竽P停≒OM)的概念,Maven可以通過一小段描述信息來管理項目的構(gòu)建,報告和文檔。
Maven的核心是一個插件執(zhí)行框架, 所有工作都是通過插件完成的。
最熟悉的插件如我們比較常用的:
clean
compiler
install
deploy
除了這些默認(rèn)流程的插件,我們針對Maven的工作機(jī)制也制作了自己的插件,如 授權(quán)系統(tǒng)抽取api.json文件的插件,如通過erm對象描述文件生成Entity實體的插件等。
定義pom模型的基本信息
使用Maven構(gòu)建的項目,首先需要在pom.xml文件中寫明基本信息,如:
<groupId>com.yudianbank.project</groupId> //組織ID <artifactId>salesAppParent</artifactId>//工程名稱 <packaging>pom</packaging>//打包方式,如:jar、war、pom、rar等 <version>1.0-RELEASES</version> //版本號
由groupId、artifactId、version三個元素定位唯一的jar信息,常說的發(fā)個Maven坐標(biāo)也就是這三個元素
modules 節(jié)點,聚合子模塊
在多模塊的項目中使用,用來定義子模塊,一般多模塊項目中,父模塊的packaging都定義為pom
<modules> <module>api</module> <module>producer</module> </modules>
parent節(jié)點,繼承其他pom模型的屬性
如:在spring boot項目中,會有如下parent節(jié)點,用來繼承spring boot已經(jīng)定義好的pom
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.7.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>
properties 節(jié)點,定義屬性信息
這個節(jié)點一般用于定義一些屬性,用來作為插件的默認(rèn)值。在這里定義的屬性可以貫穿Maven build的整個生命周期,Maven屬性是值占位符,可以在pom中通過${XXX}符號來使用
<properties> <spring-cloud.version>Dalston.SR3</spring-cloud.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <compiler.version>1.8</compiler.version> <powermock.version>1.6.4</powermock.version> <checkstyle.version>6.18</checkstyle.version> </properties>
除了如上手動定義的一些屬性,我們還可以通過如下的方式,訪問到其他的一些變量,如:
env.X
: 使用“env.”對變量進(jìn)行前綴。將返回shell的環(huán)境變量。例如,$ {env.PATH}包含PATH環(huán)境變量。 注意:雖然環(huán)境變量本身在Windows上不區(qū)分大小寫,但屬性的查找區(qū)分大小寫。換句話說,當(dāng)Windows shell為%PATH%和%Path%返回相同的值時,Maven會區(qū)分$ {env.PATH}和$ {env.Path}。從Maven 2.1.0開始,為了可靠性,環(huán)境變量的名稱被歸一化為所有大寫。
project.x
: POM中的標(biāo)記路徑將包含相應(yīng)元素的值。例如:<project> <version> 1.0 </ version> </ project>可通過$ {project.version}訪問。
settings.x
: Mavne Home路徑的settings.xml將包含相應(yīng)的元素的值。例如:<settings> <offline> false </ offline> </ settings>可通過$ {settings.offline}訪問。
Java系統(tǒng)屬性 : 通過java.lang.System.getProperties()訪問的所有屬性都可用作POM屬性,例如${java.home}。
dependencies 節(jié)點,定義項目依賴
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> </dependency> </dependencies>
除了基本的groupId、artifactId、version坐標(biāo)屬性外,dependency節(jié)點中還包括如下的常用屬性設(shè)置
type
: 依賴的類型,默認(rèn)是jar
classifier
: 分類器,額外的jar坐標(biāo)標(biāo)記,用來依賴那些從同一個POM中打出的不同的jar包。
scope
: 依賴的jar的作用范圍,可選(compile,runtime,test,system,provided)
compile
: 這是默認(rèn)范圍。所有類路徑中都提供了編譯依賴項。此外,這些依賴項將傳播到依賴項目
runtime
: 這很像compile,但表示您希望JDK或容器在運行時提供它。它僅在編譯和測試類路徑中可用,并且不可傳遞。
test
: 此范圍表示正常使用應(yīng)用程序不需要依賴項,并且僅適用于測試編譯和執(zhí)行階段。它不是傳遞性的。
provided
:這很像compile,但表示您希望JDK或容器在運行時提供它。它僅在編譯和測試類路徑中可用,并且不可傳遞。
system
:此范圍與provided的類似,只是您必須提供明確包含它的JAR,聲明后不會在存儲庫中查找
Systempath
:當(dāng)scope為system生效,用于定義本地依賴的路徑
optional
:是否啟用依賴傳遞,默認(rèn)false需要依賴傳遞。如A依賴B,B依賴C,默認(rèn)情況下A中會有C的依賴,如果在依賴B時設(shè)置optional為true,則A中不會有C的依賴
exclusions
:排除依賴傳遞
dependencies -> exclusions 節(jié)點,排除依賴傳遞
有時候為了解決項目依賴沖突,需要排除依賴的jar包通過Maven依賴傳遞特性引用的其他jar,如:
<dependency> <groupId>com.yudianbank.public</groupId> <artifactId>pdf</artifactId> <version>1.1-RELEASES</version> <exclusions> <exclusion> <groupId>commons-pool</groupId> <artifactId>commons-pool</artifactId> </exclusion> </exclusions> </dependency>
關(guān)于Maven依賴傳遞特性,當(dāng)出現(xiàn)多個jar依賴相同的不同版本jar時,遵循兩個原則來引用:
最短路徑原則:如A->B->C-D1 , A->B1->D2 , 那么最終項目A依賴的D的版本是D2。
最先定義原則: 如A->B->D1 , A->C->D2 , 那么最終項目A雨來的D的版本是D1.
dependencyManagement 節(jié)點,聲明依賴項
dependencyManagement用來管理聲明依賴項,最常見于spring boot項目中,在依賴節(jié)點只需要寫groupId、artifactId就可以定位一個jar坐標(biāo),是因為spring boot的父pom中使用dependencyManagement聲明了常用的依賴項,如:
<dependencyManagement> <dependencies> <!-- Spring Boot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot</artifactId> <version>1.5.7.RELEASE</version> </dependency> ....... </dependencies> </dependencyManagement>
使用dependencyManagement管理的依賴只是聲明了,如果沒有顯示的定義在< dependencies >節(jié)點中是不生效的
profiles -> profile 節(jié)點,定義不同環(huán)境的構(gòu)建屬性
在軟件項目迭代中,通常會有開發(fā)、測試、生產(chǎn)等不同的運行環(huán)境。很多時候不同的環(huán)境需要不同的依賴屬性,諸如此場景,都可以使用profiles來定義不同環(huán)境下的變量,如:
<profiles> <profile> <id>dev</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <!--銷售平臺 api版本--> <sales.api.version>1.0-SNAPSHOT</sales.api.version> <!--本地日志存儲地址--> <logging.path>${basedir}/target/logs</logging.path> </properties> </profile> <profile> <id>uat</id> <properties> <sales.api.version>1.0-SNAPSHOT</sales.api.version> <logging.path>/data/logs/${appName}</logging.path> </properties> </profile> <profile> <id>prod</id> <properties> <sales.api.version>1.0-RELEASES</sales.api.version> <logging.path>/data/logs/${appName}</logging.path> </properties> </profile> </profiles>
repositories、pluginRepositories 節(jié)點,定義依賴和插件的倉庫地址
這里可以定義jar拉取的倉庫地址,除了Apache中央倉庫外,還有很多其他的開源倉庫,如spring的,
<repositories> <repository> <id>central</id> <name>Central Repository</name> <url>http://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>http://repo.maven.apache.org/maven2</url> <layout>default</layout> <snapshots> <enabled>false</enabled> </snapshots> <releases> <updatePolicy>never</updatePolicy> </releases> </pluginRepository> </pluginRepositories>
build 節(jié)點,設(shè)置輸入輸出路徑
為什么在使用Maven構(gòu)建的項目中,項目編譯后會在pom所在目錄下生成target目錄?是因為在build構(gòu)建節(jié)點中有如下的默認(rèn)的配置。
當(dāng)然,如果你顯示配置了如下的屬性,就可以指定編譯后文件的輸出目錄
<build> <sourceDirectory>${basedir}/src/main/java</sourceDirectory> <scriptSourceDirectory>${basedir}/src/main/scripts</scriptSourceDirectory> <testSourceDirectory>${basedir}/src/test/java</testSourceDirectory> <outputDirectory>${basedir}/target/classes</outputDirectory> <testOutputDirectory>${basedir}/target/test-classes</testOutputDirectory> ... </build>
build -> resources,定義項目資源
resources用來定義項目的資源路徑,默認(rèn)的路徑為${basedir}/src/main/resources,在spring boot環(huán)境中,繼承了spring boot的父pom屬性,它的resources定義如下:
<resources> <resource> <directory>${basedir}/src/main/resources</directory> <filtering>true</filtering> <includes> <include>**/application*.yml</include> <include>**/application*.yaml</include> <include>**/application*.properties</include> </includes> </resource> <resource> <directory>${basedir}/src/main/resources</directory> <excludes> <exclude>**/application*.yml</exclude> <exclude>**/application*.yaml</exclude> <exclude>**/application*.properties</exclude> </excludes> </resource> </resources>
可以看到,spring boot中只定義了三種文件類型的資源,而且通配application開頭的文件。
當(dāng)項目中有其他的文件類型或不是application開頭時,Maven就會過濾掉。
而且在spring boot中定義了屬性占位符為@符號,所以在資源文件中使用${}時并不會生效。
為了解決這個問題,可以自己在pom中定義resources屬性覆蓋父pom的行為:如,
<resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*</include> </includes> <filtering>true</filtering> </resource> </resources>
build -> plugins -> plugin,定義構(gòu)建插件
plugin這個節(jié)點主要用來定義構(gòu)建的插件,包括自定義和已經(jīng)發(fā)布到中央倉庫的。如spring boot環(huán)境想構(gòu)建可執(zhí)行的jar需要添加spring-boot-maven-plugin插件。
<plugins> <!掃描url--> <plugin> <groupId>com.yudianbank.plugin</groupId> <artifactId>api-abstractor</artifactId> <version>1.1.1-RELEASE</version> <executions> <execution> <phase>process-classes</phase> <goals> <goal>createAbstract</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins>
更多可用的插件:http://maven.apache.org/plugins/index.html
distributionManagement 節(jié)點,配置deploy的倉庫地址
當(dāng)我們自己搭建了私服,想要將jar包編譯后上傳到私服時,需要在這個節(jié)點配置倉庫的地址,如:
<distributionManagement> <repository> <id>repo</id> <name>User Project Releases</name> <url>http://192.168.1.204:8081/nexus/content/repositories/releases</url> </repository> <snapshotRepository> <id>repo</id> <name>User Project SNAPSHOTS</name> <url>http://192.168.1.204:8081/nexus/content/repositories/snapshots</url> </snapshotRepository> </distributionManagement>
根節(jié)點下的name、description、url等節(jié)點
根節(jié)點下的name、description、url等節(jié)點用來描述項目的基本信息,如:
<name>sales</name> <description>這是一個銷售系統(tǒng)</description> <url>http://www.kailing.pub</url>
Licenses節(jié)點,描述許可證信息
<licenses> <license> <name>Apache License, Version 2.0</name> <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url> <distribution>repo</distribution> <comments>A business-friendly OSS license</comments> </license> </licenses>
Organization節(jié)點,描述組織信息
<organization> <name>keking</name> <url>http://www.keking.cn</url> </organization>
省略....
一般建議在開發(fā)和測試環(huán)境中的jar,打成SNAPSHOT的,生產(chǎn)環(huán)境的版本打成RELEASES的,這個可以通過上面的profiles節(jié)點來控制,他們的區(qū)別如下:
SNAPSHOT
:當(dāng)版本號帶'-SNAPSHOT'后綴時,既定義發(fā)布的jar為快照版本,應(yīng)用在依賴時,總是會拉取最新的快照版本。
RELEASES
:當(dāng)版本號帶'-RELEASES'后綴時,既定義發(fā)布的jar為發(fā)行版,應(yīng)用依賴時,首次會從遠(yuǎn)程倉庫拉取,當(dāng)本地倉庫已有時,就不會從遠(yuǎn)程倉庫拉最新的依賴了。RELEASES版本的每次更新必須指定版本號。
應(yīng)用有些模塊需要提供給別人依賴,比如api模塊、common模塊等。在開發(fā)時,每次接口有變動時,記得mvn deploy下,把jar上傳到私服。
建議依賴別的jar時,不要寫死jar的版本,通過properties節(jié)點定義的屬性來控制,那么當(dāng)你pom被別人依賴時,上層pom可以通過定義屬性值覆蓋父pom中屬性來控制依賴的版本
在多模塊時,子模塊的命名建議使用父模塊作為前綴,如sales系統(tǒng),api模塊為sales-api,app模塊為sales-app
<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>org.apache.skywalking</groupId> <artifactId>apm</artifactId> <version>6.1.0-SNAPSHOT</version> <parent> <groupId>org.apache</groupId> <artifactId>apache</artifactId> <version>21</version> </parent> <modules> <module>oap-server</module> <module>apm-commons</module> <module>apm-sniffer</module> <module>apm-application-toolkit</module> <module>apm-protocol</module> <module>apm-webapp</module> <module>apm-dist</module> <module>apm-checkstyle</module> </modules> <packaging>pom</packaging> <name>apm</name> <url>https://github.com/apache/incubator-skywalking</url> <scm> <url>https://github.com/apache/incubator-skywalking</url> <connection>scm:git:https://github.com/apache/incubator-skywalking.git</connection> <developerConnection>scm:git:https://github.com/apache/incubator-skywalking.git</developerConnection> <tag>HEAD</tag> </scm> <issueManagement> <system>GitHub</system> <url>https://github.com/apache/incubator-skywalking/issues</url> </issueManagement> <licenses> <license> <name>The Apache Software License, Version 2.0</name> <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url> </license> </licenses> <mailingLists> <mailingList> <name>SkyWalking Developer List</name> <post>dev@skywalking.incubator.apache.org</post> <subscribe>dev-subscribe@skywalking.incubator.apache.org</subscribe> <unsubscribe>dev-unsubscribe@skywalking.incubator.apache.org</unsubscribe> </mailingList> <mailingList> <name>SkyWalking Commits</name> <post>commits@skywalking.incubator.apache.org</post> <subscribe>commits-subscribe@skywalking.incubator.apache.org</subscribe> <unsubscribe>commits-unsubscribe@skywalking.incubator.apache.org</unsubscribe> </mailingList> </mailingLists> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <compiler.version>1.8</compiler.version> <powermock.version>1.6.4</powermock.version> <checkstyle.version>6.18</checkstyle.version> <junit.version>4.12</junit.version> <mockito-all.version>1.10.19</mockito-all.version> <!-- Plugin versions --> <docker.plugin.version>0.4.13</docker.plugin.version> <takari-maven-plugin.version>0.6.1</takari-maven-plugin.version> <exec-maven-plugin.version>1.6.0</exec-maven-plugin.version> <maven-antrun-plugin.version>1.8</maven-antrun-plugin.version> <maven-deploy-plugin.version>2.8.2</maven-deploy-plugin.version> <maven-assembly-plugin.version>3.1.0</maven-assembly-plugin.version> <maven-failsafe-plugin.version>2.22.0</maven-failsafe-plugin.version> <maven-surefire-plugin.version>2.22.0</maven-surefire-plugin.version> <maven-jar-plugin.version>3.1.0</maven-jar-plugin.version> <maven-shade-plugin.version>3.1.1</maven-shade-plugin.version> <maven-enforcer-plugin.version>3.0.0-M2</maven-enforcer-plugin.version> <apache-rat-plugin.version>0.12</apache-rat-plugin.version> <maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version> <maven-resource-plugin.version>3.1.0</maven-resource-plugin.version> <maven-source-plugin.version>3.0.1</maven-source-plugin.version> <versions-maven-plugin.version>2.5</versions-maven-plugin.version> <coveralls-maven-plugin.version>4.3.0</coveralls-maven-plugin.version> <maven-checkstyle-plugin.version>3.0.0</maven-checkstyle-plugin.version> <jacoco-maven-plugin.version>0.8.3</jacoco-maven-plugin.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-all</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-module-junit4</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-mockito</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-all</artifactId> <version>${mockito-all.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-module-junit4</artifactId> <version>${powermock.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-mockito</artifactId> <version>${powermock.version}</version> <scope>test</scope> </dependency> </dependencies> </dependencyManagement> <build> <pluginManagement> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <executions> <execution> <id>git submodule update</id> <phase>initialize</phase> <inherited>false</inherited> <configuration> <executable>git</executable> <arguments> <argument>submodule</argument> <argument>update</argument> <argument>--init</argument> <argument>--recursive</argument> </arguments> </configuration> <goals> <goal>exec</goal> </goals> </execution> </executions> </plugin> <!-- mvn -N io.takari:maven:wrapper -Dmaven=3.5.4 --> <plugin> <groupId>io.takari</groupId> <artifactId>maven</artifactId> <version>${takari-maven-plugin.version}</version> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>${exec-maven-plugin.version}</version> </plugin> <plugin> <artifactId>maven-antrun-plugin</artifactId> <version>${maven-antrun-plugin.version}</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>${maven-deploy-plugin.version}</version> </plugin> <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>${maven-assembly-plugin.version}</version> </plugin> <plugin> <artifactId>maven-failsafe-plugin</artifactId> <version>${maven-failsafe-plugin.version}</version> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>${maven-surefire-plugin.version}</version> </plugin> <plugin> <artifactId>maven-jar-plugin</artifactId> <version>${maven-jar-plugin.version}</version> </plugin> <plugin> <artifactId>maven-shade-plugin</artifactId> <version>${maven-shade-plugin.version}</version> </plugin> </plugins> </pluginManagement> <plugins> <plugin> <artifactId>maven-enforcer-plugin</artifactId> <version>${maven-enforcer-plugin.version}</version> <executions> <execution> <id>enforce-java</id> <goals> <goal>enforce</goal> </goals> <configuration> <rules> <requireJavaVersion> <!-- Build has not yet been updated for Java 9+ --> <version>[1.8,9)</version> </requireJavaVersion> </rules> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.rat</groupId> <artifactId>apache-rat-plugin</artifactId> <version>${apache-rat-plugin.version}</version> <configuration> <excludes> <exclude>**/target/**</exclude> <exclude>**/DISCLAIMER</exclude> <exclude>**/licenses/**</exclude> <exclude>**/ui-licenses/**</exclude> <exclude>**/codeStyle.xml</exclude> <!-- IDE files --> <exclude>**/*.iml</exclude> <exclude>**/.idea/**</exclude> <exclude>**/*.classpath</exclude> <exclude>**/.project</exclude> <exclude>**/.settings/**</exclude> <exclude>**/dependency-reduced-pom.xml</exclude> <!-- UI IDE configs --> <exclude>**/skywalking-ui/.editorconfig</exclude> <!-- UI Compiler configs --> <exclude>**/skywalking-ui/.webpackrc.js</exclude> <exclude>**/skywalking-ui/.roadhogrc.mock.js</exclude> <!-- UI Test configs --> <exclude>**/skywalking-ui/jest.config.js</exclude> <!-- UI style check files --> <exclude>**/skywalking-ui/.eslintrc.js</exclude> <exclude>**/skywalking-ui/.stylelintrc</exclude> <exclude>**/skywalking-ui/.prettierignore</exclude> <exclude>**/skywalking-ui/.prettierrc</exclude> <!-- UI icon files --> <exclude>**/skywalking-ui/public/font/iconfont/**</exclude> <!-- git files --> <exclude>**/.gitignore</exclude> <exclude>**/.gitmodules</exclude> <exclude>**/.git/**</exclude> <!-- CI files --> <exclude>**/.travis.yml</exclude> <!-- GitHub files --> <exclude>**/.github/**</exclude> <!-- document files --> <exclude>**/*.md</exclude> <excldue>**/*.MD</excldue> <exclude>**/*.txt</exclude> <exclude>**/docs/**</exclude> <!-- Test cases data in JSON format --> <exclude>**/src/test/resources/json/*.json</exclude> <!-- front end libary and generated files --> <exclude>**/skywalking-ui/node_modules/**</exclude> <exclude>**/skywalking-ui/node/**</exclude> <exclude>**/skywalking-ui/dist/**</exclude> <!-- web UI dependencies descriptions --> <exclude>skywalking-ui/package.json</exclude> <exclude>skywalking-ui/package-lock.json</exclude> <!-- Proto files of Istio, envoy, prometheus and gogoproto projects --> <exclude>**/src/main/proto/gogoproto/gogo.proto</exclude> <exclude>**/src/main/proto/envoy/**</exclude> <exclude>**/src/main/proto/google/protobuf/*.proto</exclude> <exclude>**/src/main/proto/prometheus/client_model/metrics.proto</exclude> <exclude>**/src/main/proto/validate/validate.proto</exclude> <!-- generated file from antlr --> <exclude>**/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.tokens</exclude> <!-- Maven Wrapper generated files --> <exclude>.mvn/wrapper/maven-wrapper.properties</exclude> </excludes> </configuration> <executions> <execution> <phase>verify</phase> <goals> <goal>check</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>${maven-compiler-plugin.version}</version> <configuration> <source>${compiler.version}</source> <target>${compiler.version}</target> <encoding>${project.build.sourceEncoding}</encoding> </configuration> </plugin> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>${maven-resource-plugin.version}</version> <configuration> <encoding>${project.build.sourceEncoding}</encoding> </configuration> </plugin> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>${docker.plugin.version}</version> <configuration> <skipDocker>true</skipDocker> </configuration> </plugin> <plugin> <!-- 源碼插件 --> <artifactId>maven-source-plugin</artifactId> <version>${maven-source-plugin.version}</version> <!-- 發(fā)布時自動將源碼同時發(fā)布的配置 --> <executions> <execution> <id>attach-sources</id> <phase>none</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>versions-maven-plugin</artifactId> <version>${versions-maven-plugin.version}</version> </plugin> <plugin> <groupId>org.eluder.coveralls</groupId> <artifactId>coveralls-maven-plugin</artifactId> <version>${coveralls-maven-plugin.version}</version> <configuration> <repoToken>xFwR2GqmxcMxV7tGEpW2NfwIrbCD4cQCS</repoToken> <sourceDirectories> <sourceDirectory>${project.build.sourceDirectory}</sourceDirectory> </sourceDirectories> </configuration> </plugin> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>${jacoco-maven-plugin.version}</version> <executions> <execution> <id>prepare-agent</id> <goals> <goal>prepare-agent</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-checkstyle-plugin</artifactId> <version>${maven-checkstyle-plugin.version}</version> <dependencies> <dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm-checkstyle</artifactId> <version>5.0.0-beta</version> </dependency> <dependency> <groupId>com.puppycrawl.tools</groupId> <artifactId>checkstyle</artifactId> <version>8.11</version> </dependency> </dependencies> <executions> <execution> <id>validate</id> <phase>validate</phase> <configuration> <configLocation>skywalking/checkStyle.xml</configLocation> <headerLocation>skywalking/CHECKSTYLE_HEAD</headerLocation> <encoding>UTF-8</encoding> <consoleOutput>true</consoleOutput> <includeTestSourceDirectory>true</includeTestSourceDirectory> <failsOnError>true</failsOnError> <excludes>org.apache.skywalking.apm/network/**/*.java, org.apache.skywalking.apm/collector/remote/grpc/**/*.java, org.apache.skywalking.apm/agent/core/context/ids/base64/*.java </excludes> </configuration> <goals> <goal>check</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
感謝各位的閱讀,以上就是“Maven的使用方法有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Maven的使用方法有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。