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>