使用maven来构建应用程序,可以非常方便地管理应用相关的资源。众所周知,应用程序中涉及到的一些依赖关系,如java应用程序依赖jar文件,如果只是手动找到相应的资源,可能需要花费一些时间。而且,即使已经积累了库文件,在未来应用程序升级以后,还要考虑到依赖库文件的升级情况,再次搜索收集。
还有一个问题,对应用程序依赖文件的管理是个非常复杂工作,占用存储空间不说,还可能因为应用之间的版本问题导致依赖冲突。使用maven的pom模型来构建应用程序,可以更加有效地的管理,而且配置内容非常清晰(有时多了,可能pom文件显得有点臃肿)。
下面将常用的maven配置,整理如下,以备参考。首先,整理一个简单的目录,作为快速查询之用:
设置字符集
拷贝src/main/resources/资源文件
编译代码
、编译打包成jar文件
构建测试用例配置
输出依赖jar文件到指定目录
配置指定的repository
将应用及其依赖jar文件打成一个jar文件
具体配置的详细内容,如下所示:
<b>1、设置字符集</b>
<code>1</code>
<code><</code><code>properties</code><code>></code>
<code>2</code>
<code></code><code><</code><code>project.build.sourceencoding</code><code>>utf-8</</code><code>project.build.sourceencoding</code><code>></code>
<code>3</code>
<code></</code><code>properties</code><code>></code>
在需要设置字符集的地方,引用${project.build.sourceencoding}即可。
<b>2、拷贝src/main/resources/资源文件</b>
<code>01</code>
<code><</code><code>build</code><code>></code>
<code>02</code>
<code></code><code><</code><code>pluginmanagement</code><code>></code>
<code>03</code>
<code></code><code><</code><code>plugins</code><code>></code>
<code>04</code>
<code></code><code><</code><code>plugin</code><code>></code>
<code>05</code>
<code></code><code><</code><code>groupid</code><code>>org.apache.maven.plugins</</code><code>groupid</code><code>></code>
<code>06</code>
<code></code><code><</code><code>artifactid</code><code>>maven-resources-plugin</</code><code>artifactid</code><code>></code>
<code>07</code>
<code></code><code><</code><code>version</code><code>>2.5</</code><code>version</code><code>></code>
<code>08</code>
<code></code><code><</code><code>executions</code><code>></code>
<code>09</code>
<code></code><code><</code><code>execution</code><code>></code>
<code>10</code>
<code></code><code><</code><code>id</code><code>>copy-resources</</code><code>id</code><code>></code>
<code>11</code>
<code></code><code><</code><code>phase</code><code>>package</</code><code>phase</code><code>></code>
<code>12</code>
<code></code><code><</code><code>goals</code><code>></code>
<code>13</code>
<code></code><code><</code><code>goal</code><code>>copy-resources</</code><code>goal</code><code>></code>
<code>14</code>
<code></code><code></</code><code>goals</code><code>></code>
<code>15</code>
<code></code><code><</code><code>configuration</code><code>></code>
<code>16</code>
<code></code><code><</code><code>encoding</code><code>>${project.build.sourceencoding}</</code><code>encoding</code><code>></code>
<code>17</code>
<code></code><code><</code><code>outputdirectory</code><code>>${project.build.directory}</</code><code>outputdirectory</code><code>></code>
<code>18</code>
<code></code><code><</code><code>resources</code><code>></code>
<code>19</code>
<code></code><code><</code><code>resource</code><code>></code>
<code>20</code>
<code></code><code><</code><code>directory</code><code>>src/main/resources/</</code><code>directory</code><code>></code>
<code>21</code>
<code></code><code><</code><code>includes</code><code>></code>
<code>22</code>
<code></code><code><</code><code>include</code><code>>*.properties</</code><code>include</code><code>></code>
<code>23</code>
<code></code><code><</code><code>include</code><code>>*.xml</</code><code>include</code><code>></code>
<code>24</code>
<code></code><code></</code><code>includes</code><code>></code>
<code>25</code>
<code></code><code><</code><code>filtering</code><code>>true</</code><code>filtering</code><code>></code>
<code>26</code>
<code></code><code></</code><code>resource</code><code>></code>
<code>27</code>
<code></code><code></</code><code>resources</code><code>></code>
<code>28</code>
<code></code><code></</code><code>configuration</code><code>></code>
<code>29</code>
<code></code><code></</code><code>execution</code><code>></code>
<code>30</code>
<code></code><code></</code><code>executions</code><code>></code>
<code>31</code>
<code></code><code></</code><code>plugin</code><code>></code>
<code>32</code>
<code></code><code></</code><code>plugins</code><code>></code>
<code>33</code>
<code></code><code></</code><code>pluginmanagement</code><code>></code>
<code>34</code>
<code></</code><code>build</code><code>></code>
<b>3、编译代码</b>
<code></code><code><</code><code>artifactid</code><code>>maven-compiler-plugin</</code><code>artifactid</code><code>></code>
<code></code><code><</code><code>source</code><code>>1.7</</code><code>source</code><code>></code>
<code></code><code><</code><code>target</code><code>>1.7</</code><code>target</code><code>></code>
可以指定源代码编译级别。
<b>4、编译打包成jar文件</b>
<code></code><code><</code><code>artifactid</code><code>>maven-jar-plugin</</code><code>artifactid</code><code>></code>
<code></code><code><</code><code>goal</code><code>>jar</</code><code>goal</code><code>></code>
<code></code><code><</code><code>classifier</code><code>>without-configs</</code><code>classifier</code><code>></code>
<code></code><code><</code><code>excludes</code><code>></code>
<code></code><code><</code><code>exclude</code><code>>*.properties</</code><code>exclude</code><code>></code>
<code></code><code><</code><code>exclude</code><code>>*.xml</</code><code>exclude</code><code>></code>
<code></code><code></</code><code>excludes</code><code>></code>
可以指定打包后jar文件的文件名后缀,同时可以设置是否将配置文件也打包到jar文件中。
<b>5、构建测试用例配置</b>
<code></code><code><</code><code>artifactid</code><code>>maven-surefire-plugin</</code><code>artifactid</code><code>></code>
<code></code><code><</code><code>version</code><code>>2.9</</code><code>version</code><code>></code>
<code></code><code><</code><code>skip</code><code>>true</</code><code>skip</code><code>></code>
<code></code><code><</code><code>testfailureignore</code><code>>true</</code><code>testfailureignore</code><code>></code>
构建应用时,可以配置是否执行测试用例代码,也可以配置如果测试用例未通过是否忽略。
<b>6、输出依赖jar文件到指定目录</b>
<code></code><code><</code><code>groupid</code><code>>org.eclipse.m2e</</code><code>groupid</code><code>></code>
<code></code><code><</code><code>artifactid</code><code>>lifecycle-mapping</</code><code>artifactid</code><code>></code>
<code></code><code><</code><code>version</code><code>>1.0.0</</code><code>version</code><code>></code>
<code></code><code><</code><code>lifecyclemappingmetadata</code><code>></code>
<code></code><code><</code><code>pluginexecutions</code><code>></code>
<code></code><code><</code><code>pluginexecution</code><code>></code>
<code></code><code><</code><code>pluginexecutionfilter</code><code>></code>
<code></code><code><</code><code>artifactid</code><code>>maven-dependency-plugin</</code><code>artifactid</code><code>></code>
<code></code><code><</code><code>versionrange</code><code>>[2.0,)</</code><code>versionrange</code><code>></code>
<code></code><code><</code><code>goal</code><code>>copy-dependencies</</code><code>goal</code><code>></code>
<code></code><code><</code><code>goal</code><code>>unpack</</code><code>goal</code><code>></code>
<code></code><code></</code><code>pluginexecutionfilter</code><code>></code>
<code></code><code><</code><code>action</code><code>></code>
<code></code><code><</code><code>ignore</code> <code>/></code>
<code></code><code></</code><code>action</code><code>></code>
<code></code><code></</code><code>pluginexecution</code><code>></code>
<code></code><code></</code><code>pluginexecutions</code><code>></code>
<code></code><code></</code><code>lifecyclemappingmetadata</code><code>></code>
<code>35</code>
<code></code><code><</code><code>version</code><code>>2.8</</code><code>version</code><code>></code>
<code>36</code>
<code>37</code>
<code>38</code>
<code></code><code><</code><code>id</code><code>>copy-dependencies</</code><code>id</code><code>></code>
<code>39</code>
<code>40</code>
<code>41</code>
<code>42</code>
<code>43</code>
<code>44</code>
<code></code><code><</code><code>outputdirectory</code><code>>${project.build.directory}/lib</</code><code>outputdirectory</code><code>></code>
<code>45</code>
<code></code><code><</code><code>overwritereleases</code><code>>false</</code><code>overwritereleases</code><code>></code>
<code>46</code>
<code></code><code><</code><code>overwritesnapshots</code><code>>false</</code><code>overwritesnapshots</code><code>></code>
<code>47</code>
<code></code><code><</code><code>overwriteifnewer</code><code>>true</</code><code>overwriteifnewer</code><code>></code>
<code>48</code>
<code>49</code>
<code>50</code>
<code>51</code>
<code>52</code>
<code>53</code>
上面,和pluginmanagement并列的plugins元素中配置的是拷贝依赖jar文件到target/lib目录下面,如果在eclipse中出现maven-dependency-plugin (goals “copy-dependencies”, “unpack”) is not supported by m2e错误,上面pluginmanagement元素中的配置,可以解决这个错误提示。
<b>7、配置指定的repository</b>
<code><</code><code>repositories</code><code>></code>
<code></code><code><</code><code>repository</code><code>></code>
<code></code><code><</code><code>id</code><code>>cloudera</</code><code>id</code><code>></code>
<code>4</code>
<code>5</code>
<code></code><code></</code><code>repository</code><code>></code>
<code>6</code>
<code></</code><code>repositories</code><code>></code>
如果我们需要要的一些依赖jar文件在maven中央repository中没有,可以在pom文件中配置特定的repository,一般需要配置id和url。
<b>8、将应用及其依赖jar文件打成一个jar文件</b>
<code></code><code><</code><code>artifactid</code><code>>maven-assembly-plugin</</code><code>artifactid</code><code>></code>
<code></code><code><</code><code>archive</code><code>></code>
<code></code><code><</code><code>manifest</code><code>></code>
<code></code><code><</code><code>mainclass</code><code>>org.shirdrn.solr.cloud.index.hadoop.solrcloudindexer</</code><code>mainclass</code><code>></code>
<code></code><code></</code><code>manifest</code><code>></code>
<code></code><code></</code><code>archive</code><code>></code>
<code></code><code><</code><code>descriptorrefs</code><code>></code>
<code></code><code><</code><code>descriptorref</code><code>>jar-with-dependencies</</code><code>descriptorref</code><code>></code>
<code></code><code></</code><code>descriptorrefs</code><code>></code>
<code></code><code><</code><code>id</code><code>>make-assembly</</code><code>id</code><code>></code>
<code></code><code><</code><code>goal</code><code>>single</</code><code>goal</code><code>></code>