maven將本身定位爲一個項目管理工具。它負責管理項目開發過程當中的幾乎全部的東西:java
所謂的"約定優於配置",在maven中並非徹底不能夠修改的,他們只是一些配置的默認值而已。可是使用者除非必要,並不須要去修改那些約定內容。maven默認的文件存放結構以下:web
|/項目目錄 |----pom.xml //用於maven的配置文件 |----/src //源代碼目錄 |---- /main //工程源代碼目錄 |----/java //工程java源代碼目錄 |----/resource //工程的資源目錄 |----/test //單元測試目錄 |----/java |----/target //輸出目錄,全部的輸出物都存放在這個目錄下 |----/classes //編譯以後的class文件
|---總項目/ |---pom.xml 總項目的pom配置文件 |---子項目1/ |---pom.xml 子項目1的pom文件 |---子項目2/ |---pom.xml 子項目2的pom文件
注:在總項目中的<packaging>爲pom,而且須要設置使用<modules>來設置他的子項目spring
在總項目中加入apache
<modules> <module>sub-module1</module> <module>sub-module2</module> </modules>
其次在每一個子項目中加入windows
<parent> <groupId>parent.groupId</groupId> <artifactId>sub-module1</artifactId> <version>1.0</version> </parent>
maven使用以下幾個要素來惟必定位某一個輸出物: groupId:artifactId:packaging:version tomcat
任意一個外部依賴說明包含以下幾個要素:groupId, artifactId, version, scope, type, optional。其中前3個是必須的,各自含義以下:服務器
在maven中,scope包含以下的取值:dom
經過在<properties>設置屬性,在後面能夠經過${}來直接使用,以下面例子中的配置,就能夠方便管理spring的統一版本號maven
<properties> <spring.version>4.3.1.RELEASE</spring.version> </properties> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency>
maven提供了三個隱式的變量,用來訪問系統環境變量、POM信息和maven的settings:ide
profile是maven的一個重要特性,它可讓maven可以自動適應外部的環境變化,好比同一個項目,在開發環境和線上環境使用不一樣的配置文件,則能夠
<profiles>
<profiles> <profile> <id>local</id> <properties> <package.environment>local</package.environment> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>online</id> <properties> <package.environment>online</package.environment> </properties> </profile> </profiles>
這樣在打包配置文件的時候使用
<build> <resources> <resource> <directory>${package.environment}</directory> <includes> <include>**/*</include> </includes> </resource> </resources> <build>
就能夠針對不一樣的profile打包不一樣的配置文件
若是咱們引入一個依賴A,但不想依賴A所依賴B,則可使用<exclusion>
<dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <exclusions> <exclusion> <artifactId>spring</artifactId> <groupId>org.springframework</groupId> </exclusion> </exclusions> </dependency>
<project> ... <build> ... <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin> </plugins> ... </build> ... </project>
<build> <directory>target</directory> <sourceDirectory>src</sourceDirectory> <scriptSourceDirectory>js/scripts</scriptSourceDirectory> <testSourceDirectory>test</testSourceDirectory> <outputDirectory>bin</outputDirectory> <testOutputDirectory>bin</testOutputDirectory> </build>
<project> ... <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> ... </project>
<build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </plugin> </plugins> </build>
而後使用命令打包便可:mvn assembly:assembly
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>1.1</version> <executions> <execution> <id>add-source</id> <phase>generate-sources</phase> <goals> <goal>add-source</goal> </goals> <configuration> <sources> <source>src/config/java</source> <source>src/main/java</source> <source>src/member/java</source> </sources> </configuration> </execution> </executions> </plugin>