大家好,我是瓜哥:
最近在做微服务项目架构搭建,maven是我们开发当中必不可少的工具,下面对maven的一些规范进行整理。
- Maven目录结构说明
src/main/java | 源代码目录 |
src/main/resources | 所需资源目录 |
src/main/filters | 资源过滤文件目录 |
src/main/assembly | Assembly descriptors |
src/main/config | 配置文件根目录 |
src/main/webapps | 各种静态资源或者web相关资源 |
src/test/java | 测试代码目录 |
src/test/resources | 测试所需资源目录 |
src/test/filters | 测试资源过滤文件目录 |
src/site | 与site相关的资源目录 |
Target/ | 输出目录根 |
Target/classes | 项目主体输出目录 |
Test-classes | 项目测试输出目录 |
LICENSE.txt | Project's license |
README.txt | Project's readme |
- Maven聚合工程项目结构规范
如下为maven聚合工程的一个项目结构
maven-project(Maven Project) |- maven-sub4 |
maven-project就是个建一个普通的Maven Project,这里省略。唯一注意的一点是,Packaging必须选择pom。
1、要在pom工程中定义公共变量
<!-- 定义公共变量 --> <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> <junit.version>4.12</junit.version> </properties> |
2、pom工程中定义聚合模块
<!-- 待聚合模块 --> <modules> <module>study-common</module> <module>study-pojo</module> <module>study-dao</module> <module>study-service</module> <module>study-elasticsearch</module> <module>study-zookeeper</module> <module>study-web</module> </modules> |
3、pom工程中配置远程部署仓库地址
<!-- 配置部署的远程仓库 --> <distributionManagement> <repository> <id>spdbccc</id> <name>Nexus deppen</name> <url>http://192.168.17.183:8081/nexus/content/repositories/releases</url> </repository> <snapshotRepository> <id>snapshot</id> <name>Repository for pamirs</name> <url>http://192.168.17.183:8081/nexus/content/repositories/snapshots</url> </snapshotRepository> </distributionManagement> |
4、<dependencyManagement/>元素中引入所有要进入的jar包
a、这里配置了<distributionManagement>,这样子项目就不需要重复配置了
b、通过<pluginManagement>,对一些插件进行了公共的配置,这里主要是为了消除构建时的告警
- pom工程规范举例
<?xml version="1.0" encoding="UTF-8"?> <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.study</groupId> <artifactId>study</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging>
<name>study</name> <url>http://www.example.com</url>
<properties> <project.build.sourceEncoding>utf-8</project.build.sourceEncoding> <jdk.version>1.8</jdk.version> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> <junit.version>4.12</junit.version> <servlet.version>3.0.1</servlet.version> <jsp-api.version>2.0</jsp-api.version> <jstl.version>1.2</jstl.version> <log4j2.version>2.8.2</log4j2.version> <spring.version>4.3.8.RELEASE</spring.version> <mybaitsplus.version>2.0.8</mybaitsplus.version> <mysql.version>5.1.40</mysql.version> <druid.version>1.0.29</druid.version> <shiro.version>1.3.2</shiro.version> <ehcache.version>2.6.11</ehcache.version> <jackson.version>2.8.8</jackson.version> <commons-io.version>2.5</commons-io.version> <hibernate-validator.version>5.3.5.Final</hibernate-validator.version> <poi.version>3.16</poi.version> <jetty.version>9.2.17.v20160517</jetty.version> <commons-lang3.version>3.6</commons-lang3.version> <el-api.version>2.2</el-api.version> <el.version>3.0.0</el.version> <hibernate-validator.version>5.1.3.Final</hibernate-validator.version> </properties> <modules> <module>study-common</module> <module>study-pojo</module> <module>study-dao</module> <module>study-service</module> <module>study-elasticsearch</module> <module>study-zookeeper</module> <module>study-web</module> </modules> <dependencyManagement> <dependencies> <!-- test begin --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> </dependency> <!-- web begin --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>${servlet.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <version>${jsp-api.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>${jstl.version}</version> </dependency> <!-- web end --> <!-- log4j2 begin --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>${log4j2.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-jcl</artifactId> <version>${log4j2.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>${log4j2.version}</version> </dependency> <!-- log4j2 end --> <!-- Spring begin --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <!-- spring end --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>${commons-io.version}</version> </dependency>
<!-- jackson begin --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> </dependency> <!-- jackson end --> <!-- shiro begin --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>${shiro.version}</version> <exclusions> <exclusion> <artifactId>slf4j-api</artifactId> <groupId>org.slf4j</groupId> </exclusion> </exclusions> </dependency> <!-- poi provided 不强制依赖 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>${poi.version}</version> <scope>provided</scope> </dependency> <!-- ehcache和redis必选其一,也可同时使用(需要注意) --> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> <version>${ehcache.version}</version> </dependency>
<dependency> <groupId>org.glassfish</groupId> <artifactId>javax.el</artifactId> <version>${el.version}</version> </dependency> <dependency> <groupId>javax.el</groupId> <artifactId>el-api</artifactId> <version>${el-api.version}</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>${commons-lang3.version}</version> </dependency> <!-- Mybatis-Plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>${mybaitsplus.version}</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>${hibernate-validator.version}</version> <!-- <classifier>testing</classifier> --> </dependency> </dependencies> </dependencyManagement> <!-- 使用aliyun镜像 --> <repositories> <repository> <id>aliyun</id> <name>aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </repository> </repositories> </project> |
- Maven常用插件总结
<build> <finalName>study-common</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>${jdk.version}</source> <target>${jdk.version}</target> <encoding>${project.build.sourceEncoding}</encoding> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.12.4</version> <configuration> <excludes> <exclude>**/*Test.java</exclude> </excludes> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.0.2</version> </plugin> <!-- 自动在运行的时候进行打成war包 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.1.1</version> <configuration> <!-- 重点是这个配置 --> <warName>cubc</warName> <warSourceDirectory>${project.basedir}/${pro.outerDirectory}</warSourceDirectory> <packagingExcludes>WEB-INF/web.xml</packagingExcludes> <failOnMissingWebXml>false</failOnMissingWebXml> <warSourceExcludes>js/**/*.js,libs/**/*.js,css/**/*.css,libs/**/*.css,WEB-INF/**/*.html</warSourceExcludes> </configuration> </plugin> </plugins> </build> |