Maven-pom.xml文件详解
- pom.xml作用分析
现在已经实现了Maven的基本配置,但是这个时候的配置会存在以下问题:
1)当前情况下,对于Maven项目中使用的JDK都是通过了Eclipse自身的配置完成的,这样的配置根本就没有任何实际的意义,因为在真正使用Maven进行部署的时候,这样的配置是会被Maven忽略掉的。
2)如果要使用开发框架,例如:现在最为流行的Spring与MyBatis,这个时候往往会需要大量的.xml文件和.properties文件,此时这些文件默认情况下都会保存在resources目录之中,而后会将其在运行时保存在classes目录下,可是项目往往需要划分如下几种情况:
1.开发者使用:使用的是开发者自己的主机配置,那么一些配置一定与本人电脑有关
2.集中的测试:往往又需要进行一些配置的更新,(连接的服务器的更新,数据库的更新)
3.线上产品环境:需要为其更换为公网的相关配置;
3)java开发领域上所有的开发包的版本是一件非常头疼的事情,那么当一个pom.xml文件非常庞大的时候你该如何进行版本的更换呢?
4)项目开发完成之后往往需要将程序打包为.jar或者.war文件,源代码文件,这些文件如何可以正常生成。
之前的配置都属于Maven的简单使用过程,如果要想在真实的开发环境中去使用Maven,那么就需要进行pom.xml文件的配置。
也就是说这个pom.xml文件并不单单只是一个配置依赖程序包的关系。它可以配置更多的属性,包括插件项。
利用这些配置项的设置,能够帮助我们尽可能快速提高开发效率。
- 定义环境属性
所谓的环境属性相当于是在pom.xml文件里面定义一些基本的变量信息,例如:可以将项目的名称、版本编号以及一些其他的属性路径等等都作为变量进行一个整体的声明。那么这样对于整个的开发程序就可以利用这些变量的引用实现内容的变更。
1.传统的pom.xml文件引入的配置问题:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.0.7.RELEASE</version>
</dependency>
</dependencies>
注意这些开发包的版本应该一致,版本可能会被随时更新。
那么在这样的情况下就会发现,如果直接将所有的maven依赖程序库直接复制到pom.xml文件之中,那么会造成非常麻烦的维护问题。
2.建议定义全局属性来进行相关的内容控制:
全局属性定义:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
具体配置:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>4.12</junit.version>
<srping.version>5.0.7.RELEASE</srping.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${srping.version}</version>
</dependency>
</dependencies>
这样对于整个程序而言,定义两个版本的变量,并且引用
如果将一些公共的版本信息或者是一些目录信息都设置为全局环境属性,这样对于日后的项目的维护会非常方便,所以在实际的开发之中,建议大家都是用这样的方式来进行基本信息的定义。
将具体版本号设置为全局环境变量,并且引用即可。
- 插件配置
在之前进行Maven问题分析的时候强调过,所有在Eclipse之中进行的Maven的配置都没有实际的意义,只是针对于当前的工作区和当前使用的项目有效,那么为了真正的让整个的项目长期有效,再这样的情况下就强烈建议大家需要设置一些相关的插件,例如:可以设置编译插件以配置为完所需要的JDK版本
1.修改pom.xml文件进行JDK编译插件的配置: build
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jdk.version>1.7</jdk.version><!-- 定义一个描述jdk版本的公共属性 -->
<junit.version>4.12</junit.version>
<srping.version>5.0.7.RELEASE</srping.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${srping.version}</version>
</dependency>
</dependencies>
<build>
<finalName>em</finalName>
<plugins> <!-- 定义要使用的插件,在整个的Maven里面插件很多 -->
<plugin><!-- 定义其中的一个插件 -->
<groupId>org.apache.maven.plugins</groupId><!-- 定义插件的组织信息 -->
<artifactId>maven-compiler-plugin</artifactId><!-- 要使用的是编译插件 -->
<configuration>
<source>${jdk.version}</source>
<target>${jdk.version}</target>
<encode>${project.build.sourceEncoding}</encode>
</configuration>
</plugin>
</plugins>
</build>
2.虽然你已经为项目配置好了插件,但是这个时候该插件没有实际的效果,如果要想让配置起作用,还需要进行整体的项目更新
ALT+F5或者
鼠标右键-Maven-Update Project
可以方便的进行项目配置
此处执行的时候可能会报错!
test的时候要选择settings,默认的仓库地址未必能用
选择国内仓库进行配置 :
<build>
<finalName>em</finalName>
<plugins> <!-- 定义要使用的插件,在整个的Maven里面插件很多 -->
<plugin><!-- 定义其中的一个插件 -->
<!-- <groupId>org.apache.maven.plugins</groupId> --><!-- 定义插件的组织信息 -->
<artifactId>maven-compiler-plugin</artifactId><!-- 要使用的是编译插件 -->
<configuration>
<source>${jdk.version}</source>
<target>${jdk.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
</plugins>
</build>
注意:必须选择Goals:package
执行结果:
可以编译成可执行的jar文件
3.随后可以直接通过package进行程序的打包处理:
4.很多时候会发现在一些开源项目发布的时候,除了有.jar文件之外,还会发布源代码(.jar),如果现在要想实现源代码的输出配置,那么就可以继续使用一个插件:
<plugin><!-- 定义其中的一个插件 -->
<groupId>org.apache.maven.plugins</groupId><!-- 定义插件的组织信息 -->
<artifactId>maven-source-plugin</artifactId><!-- 要使用的是编译插件 -->
<configuration>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
<executions><!-- 进行执行的配置 -->
<execution>
<id>sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
5.随后同样执行项目的打包处理,打包之后会自动在target目录下生成源文件信息。
重新执行:
先打jar包,再执行源代码的打包
源代码jar包给出的是源码
而另外一个jar包是只有class源码
6.实际上也可以在运行的时候生成相关的程序文档,在执行的时候使用:javadoc:javadoc 前提:你需要有文档注释
范例定义一个新的程序类:
必须建立在 src/main/java,而不是src/test/java下面
package cn.mldn.util;
import java.sql.Connection;
/**
* 本类的主要功能是取得数据库的连接信息
* @author wanghaoxin
*
*/
public class DBUtil {
/**
* 取得数据库的连接对象
* @return 准备好的数据库连接对象,如果没有连接,则返回null
*/
public Connection getConnection(){
return null;
}
/**
* 设置数据库连接的驱动程序名称
* @param driverName 数据库连接程序的路径名称
*/
public void setDriverName(String driverName){
}
}
7.进行文档的生成,在执行的时候重新设置执行项:
此时实际上会通过网络下载一些支持的程序包
执行结果:
实际上保存到了site目录之中
8.现在有一个问题出现了:这个时候给出的doc文档是以文件目录的形式完成的,而很多时候都会以*.jar文件的形式来完成,所以这种情况下,如果希望继续以打包的形式来实现输出,那么继续配置一个文档插件:
<plugin><!-- 定义其中的一个插件 -->
<groupId>org.apache.maven.plugins</groupId><!-- 定义插件的组织信息 -->
<artifactId>maven-javadoc-plugin</artifactId><!-- 要使用的是编译插件 -->
<configuration>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
<executions><!-- 进行执行的配置 -->
<execution>
<id>javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
对于常用的一些插件把代码留好了,直接复制粘贴使用即可。
Maven-clean:会自动清除掉之前打包的内容和数据
执行结果:
所以很多开源优秀软件、MyBatis的帮助文档都jar包的形式出现,就是因为都使用了这样的插件。