项目准备(pom.xml)
基础属性
这里包括jar包版本管理、编译插件版本管理、构建编码等,特别指出尽量显示注明
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
,
因为在windows环境默认编码gbk
,这里指命令行运行时。可能大家用IDE的时候没什么影响,我是在平时命令行构建时发现的。后来形成了个人的一点理念:一个良好的maven项目,应能脱离IDE环境正确构建。 大家可不必纠结这点,只是作为建议。
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<springboot.version>1.5.16.RELEASE</springboot.version>
<mysql-connector-version>5.1.47</mysql-connector-version>
<spring-cloud.version>Dalston.SR3</spring-cloud.version>
</properties>
尽量规范,不要懒省事,形成习惯对于高效开发更有帮助。
基本操作
常用命令
-
清除
mvn clean
-
打包
mvn clean package
注:为避免不必要的问题,我习惯于强制执行清除操作
-
上传本地库
mvn clean install
-
上传私服
mvn clean deploy -P snap
这里在pom文件中加了发布管理,-P snap表示id为snap的profile在构建过程中生效
<profiles> <profile> <id>snap</id> <distributionManagement> <repository> <id>nexus-snapshots</id> <name>nexus snapshots</name> <url>http://yourhost:port/nexus/content/repositories/snapshots/</url> </repository> </distributionManagement> </profile> <profile> <id>rel</id> <distributionManagement> <repository> <id>nexus-releases</id> <name>nexus releases</name> <url>http://yourhost:port/nexus/content/repositories/releases/</url> </repository> </distributionManagement> </profile> </profiles>
-
依赖排查
mvn dependency:tree >./tree.txt
通过这个,你可以了解到项目引入了哪些依赖,以及是怎么引入的。
-
跳过测试
由于某种原因,你想跳过测试(代码不规范、环境不合适,总之影响构建但不影响war包运行)
mvn clean package -Dmaven.test.skip=true
不执行用例但编译,上面的不会编译
mvn clean package -DskipTests
依赖管理
比如当你不需要Springboot
作为项目父级的时候,可采用下面的方式
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${springboot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
它会帮你管理版本及依赖关系,并在需要的的时候引入依赖。所以不用担心它会引入所有的依赖。
插件管理
当你需要修改一些插件的行为时,可在这里进行管理。
<build>
<!-- 最终打包的名字demo.jar或demo.war,不指定则是按照发布的格式${artifactId}-${version}.jar/.war-->
<finalName>demo</finalName>
<plugins>
<!-- 在compile生命周期生效-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
</configuration>
</plugin>
<!-- 打jar包的一些操作-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<manifest></manifest>
<manifestEntries>
<Create-By>com.balabala</Create-By>
</manifestEntries>
</archive>
</configuration>
</plugin>
<!-- 打war包的一些操作-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<warName>demo</warName>
<failOnMissingWebXml>false</failOnMissingWebXml>
<recompressZippedFiles>false</recompressZippedFiles>
<archive>
<compress>false</compress>
<manifestFile>${manifestFileToUse}</manifestFile>
</archive>
<packagingExcludes>
WEB-INF/classes/demo/*.json,
WEB-INF/lib/tomcat*.jar
</packagingExcludes>
</configuration>
</plugin>
</plugins>
</build>
这里只是简单的举例,在你需要修改插件行为时、或者构建没有达到你的预期时,可以在这个节点扩展配置。
骨架构建
主要操作
- 根据现有项目构建骨架
mvn clean archetype:create-from-project -Darchetype.properties=./archetype.properties
- 打包安装骨架
cd ./target/generated-sources/archetype mvn clean install
- 根据骨架创建maven项目
指定archetypeCatalog为local有助于快速构建mvn archetype:generate -DarchetypeGroupId=上一步的GroupId -DarchetypeArtifactId=上一步的ArtifactId -DarchetypeVersion=版本号 -DarchetypeCatalog=local
自定义修改
-
target/generated-sources/archetype/src/main/resources/META-INF/maven/archetype-metadata.xml
<archetype-descriptor> <fileSets> <fileSet filtered="true" encoding="UTF-8"> <directory>src/main/java</directory> <includes> <include>**/*.java</include> </includes> </fileSet> <!-- 去掉不相关的部分,其他略--> </fileSets> <!-- 需要的属性,可选可扩展--> <requiredProperties> <requiredProperty key="groupId"/> <requiredProperty key="artifactId"/> <requiredProperty key="version"> <defaultValue>1.0.0</defaultValue> </requiredProperty> </requiredProperties> </archetype-descriptor>
-
archetype.properties
#archetype.languages=UTF-8 package=aaa #excludePatterns=resource #groupId=cc.linker.archetypes #artifactId=spring-archetype-webapp #version=2
只有
package
这项得到了验证,可在创建骨架时将包内的出现aaa的地方替换成想要的名字。如用IDE创建,需添加package
属性,届时骨架内出现__package__
的地方将会被替换。
过程:com.aaa.module
->com.__package__.module
->com.some_name.module
参考地址:
- Maven Archetype Plugin
- ArchetypeDescriptor
- Generate project using an alternative catalog
- archetype:create-from-project
写在最后
IDE为你的项目构建做了各种优化,不过当你发现问题时,或许可以到这里找找解决办法。你只要记着,所有你忽略的操作,不是因为不需要,而是有默认实现或是其他工具为你做了。