本系列博文有很长一段时间没有更新了,一切源于这期间由一些其余时请须要处理,同时本身也有点松懈了,接下来须要追遇上来了。css
本文将演示使用eclipse中的maven进行简单的项目的依赖管理、打包配置以及进行打包。java
eclipse中建立全空的maven项目(packaging为jar),若是不清楚的,能够参考前面的文章。mysql
刚建立完成以后,文件树是这样的git
BlogExample2 ├── .classpath ├── .git │ ├── branches │ ├── config │ ├── FETCH_HEAD │ ├── HEAD │ ├── hooks │ ├── index │ ├── logs │ │ ├── HEAD │ │ └── refs │ │ ├── heads │ │ │ └── master │ │ └── remotes │ │ └── origin │ │ └── master │ ├── objects │ │ ├── 09 │ │ │ └── 0de75a2fb3f838ed0e09b06245beac15375223 │ │ ├── 36 │ │ │ └── c8b0cdf2d254b97d1dbd56873a5e5ff3c89402 │ │ ├── aa │ │ │ └── 461803a95b3ebff7356772ea379029694fce09 │ │ ├── d6 │ │ │ └── 9a0381ef76acc3e0cd248aae28de88b5b00c95 │ │ ├── db │ │ │ └── 9ae43e25a6aa124f886fd9dccbff8c4ffdf81f │ │ ├── info │ │ └── pack │ │ ├── pack-b98bb4645cb790f02c640335d24f5a934ea93be8.idx │ │ └── pack-b98bb4645cb790f02c640335d24f5a934ea93be8.pack │ └── refs │ ├── heads │ │ └── master │ ├── remotes │ │ └── origin │ │ └── master │ └── tags ├── .gitignore ├── LICENSE ├── pom.xml ├── .project ├── README.md ├── .settings │ ├── org.eclipse.core.resources.prefs │ ├── org.eclipse.jdt.core.prefs │ └── org.eclipse.m2e.core.prefs └── target ├── classes └── test-classes
为了不和解决各类因为编码不一致致使的问题,咱们须要对咱们的项目配置统一的编码,通常设置为UTF-8编码,须要在pom.xml中配置github
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> </properties>
咱们常常须要依赖其余的库来完成代码编写,通常咱们能够在相关库的介绍中找到maven依赖配置信息,若是没有,能够经过maven中央仓库进行搜索。web
对于一个依赖,咱们通常须要配置3项:groupId、artifactId、version,对于少数状况,咱们还须要配置scope。前三项是惟一肯定依赖库的三元素,后面那一项是为了告诉maven这个依赖的使用范围。spring
假设咱们须要依赖mysql的jdbc驱动,咱们须要配置:sql
<dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${version.mysql-jdbc}</version> <scope>${prop.depScope}</scope> </dependency> </dependencies>
这个,我将版本和范围都使用了变量的方式来配置,这两个变量须要在标签<properties>中进行配置,如:apache
<properties> <version.mysql-jdbc>5.1.38</version.mysql-jdbc> <prop.depScope>provided</prop.depScope> </properties>
采用这种变量的方式配置,好处在于能够重复使用这个变量,由于有一些依赖库是须要配置几个依赖的,如spring、log4j2,这样就能够作到一改全改,方便维护,请看这个:api
<properties> <version.spring>4.2.6.RELEASE</version.spring> <version.log4j>2.5</version.log4j> <prop.depScope>compile</prop.depScope> </properties> <dependencies> <!-- spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${version.spring}</version> <scope>${prop.depScope}</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${version.spring}</version> <scope>${prop.depScope}</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${version.spring}</version> <scope>${prop.depScope}</scope> </dependency> <!-- 日志 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-jcl</artifactId> <version>${version.log4j}</version> <scope>${prop.depScope}</scope> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-web</artifactId> <version>${version.log4j}</version> <scope>${prop.depScope}</scope> </dependency> </dependencies>
配置了依赖,就能够愉快的写代码了,而后代码携带必定时候就须要打包、测试了,这个时候就须要配置相应的打包的配置了。maven默认的关于打包的配置已经使得你可以不进行任何配置了,可是对于某些有特别需求的场景还时须要进行配置的。
除了
<packaging>xxxx</packaging>
这个配置之外,全部的关于打包的配置都在<build>标签里面,主要是关于源代码文件路径、配置文件路径、输出文件名、输出路径、编译参数、打包包含和排除文件、javadoc生成等等。不少都是以插件的形式提供,也有部分配置是直接标签进行配置,官方插件能够参看官方的文档进行配置。
<properties> <version.java>1.8</version.java> <version.javadoc>8</version.javadoc> <version.compiler-plugin>3.5.1</version.compiler-plugin> <version.war-plugin>2.6</version.war-plugin> <version.clean-plugin>3.0.0</version.clean-plugin> <version.resources-plugin>2.7</version.resources-plugin> <version.surefire-plugin>2.19.1</version.surefire-plugin> <version.jar-plugin>2.6</version.jar-plugin> <version.source-plugin>3.0.0</version.source-plugin> <version.javadoc-plugin>2.10.3</version.javadoc-plugin> <version.gpg-plugin>1.6</version.gpg-plugin> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>${version.compiler-plugin}</version> <configuration> <source>${version.java}</source> <target>${version.java}</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>${version.jar-plugin}</version> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>${version.war-plugin}</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>${version.source-plugin}</version> <executions> <execution> <id>attach-sources</id> <goals> <goal>jar-no-fork</goal> </goals> </execution> </executions> <configuration> <attach>true</attach> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>${version.javadoc-plugin}</version> <executions> <execution> <phase>package</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> <configuration> <links> <link>http://docs.oracle.com/javase/${version.javadoc}/docs/api</link> </links> </configuration> </plugin> </plugins> </build>
在配置插件的时候,对于groupId为org.apache.maven.plugins的插件其实时能够不用配置groupId的,可是配置上看起来更完整一些。
下面来配置一个关于使用第三方插件为javaFX应用打包系统直接能够运行程序的包的配置。
<properties> <version.maven-assembly-plugin>2.6</version.maven-assembly-plugin> <version.javafx-maven-plugin>8.4.0</version.javafx-maven-plugin> </properties> <build> <finalName>JavaFXnative</finalName> <plugins> <plugin> <groupId>com.zenjava</groupId> <artifactId>javafx-maven-plugin</artifactId> <version>${version.javafx-maven-plugin}</version> <configuration> <!-- 启动类 --> <mainClass>com.zycoo.billing.Main</mainClass> <!-- 运行文件名 --> <appName>${project.build.finalName}-${project.version}</appName> <!-- 图标的位置 --> <deployDir>${basedir}/src/deploy</deployDir> <!-- 菜单 --> <needMenu>true</needMenu> <!-- 桌面图标 --> <needShortcut>true</needShortcut> <!-- 公司名称 --> <vendor>zycoo</vendor> </configuration> </plugin> </plugins> </build>
插件的github地址和官方文档说明请看这里。
关于打包,很简单,在项目上面右键-run as-maven build/maven install等等,只不过build的时候通常会叫你输入运行的命令,通常状况下都填写“clean package”,这至关于直接在命令行运行“mvn clean package”。
对于上面的javaFX打包,由于自己须要执行“mvn clean jfx:native”因此须要输入“clean jfx:native”.
相似于面向对象中的父类,maven支持本pom.xml继承于某一packaging类型为pom的模块,以便于实现配置的集中管理。
各大开源项目都使用了这种方式进行配置。
配置使用标签<parent>配置,下面进行举例:
<parent> <groupId>cn.songxinqiang</groupId> <artifactId>oss-parent</artifactId> <version>1.6</version> </parent>
本文虽然对通常的maven项目的配置的各个方面都涉及说明了,可是对于不少具体的、特殊的需求并无很深刻的讲解,毕竟本文只是一篇入门的文章,不少“高级”的用法都还须要慢慢在实际使用中进行摸索。后续会继续推出maven使用的文章,届时会专一于某一个小的方面的问题进行讲述,那就会详细得多。
本文涉及的不少通用的配置,我都做为开源项目托管到git上面了,请参看下面的地址:
https://git.oschina.net/songxinqiang/OSSParent
https://git.oschina.net/songxinqiang/SSMVParent
同时也发布到了maven中央仓库,你若是想使用的话,直接配置<parent>标签便可:
<parent> <groupId>cn.songxinqiang</groupId> <artifactId>oss-parent</artifactId> <version>1.6</version> </parent>
<parent> <groupId>cn.songxinqiang</groupId> <artifactId>ssmv-parent</artifactId> <version>1.0.1</version> </parent>
若有不对的地方,还望指正!!
enjoy!