天天看点

Maven构建应用程序常用配置

使用maven来构建应用程序,可以非常方便地管理应用相关的资源。众所周知,应用程序中涉及到的一些依赖关系,如java应用程序依赖jar文件,如果只是手动找到相应的资源,可能需要花费一些时间。而且,即使已经积累了库文件,在未来应用程序升级以后,还要考虑到依赖库文件的升级情况,再次搜索收集。

还有一个问题,对应用程序依赖文件的管理是个非常复杂工作,占用存储空间不说,还可能因为应用之间的版本问题导致依赖冲突。使用maven的pom模型来构建应用程序,可以更加有效地的管理,而且配置内容非常清晰(有时多了,可能pom文件显得有点臃肿)。

下面将常用的maven配置,整理如下,以备参考。首先,整理一个简单的目录,作为快速查询之用:

设置字符集

拷贝src/main/resources/资源文件

编译代码

、编译打包成jar文件

构建测试用例配置

输出依赖jar文件到指定目录

配置指定的repository

将应用及其依赖jar文件打成一个jar文件

具体配置的详细内容,如下所示:

<b>1、设置字符集</b>

<code>1</code>

<code>&lt;</code><code>properties</code><code>&gt;</code>

<code>2</code>

<code></code><code>&lt;</code><code>project.build.sourceencoding</code><code>&gt;utf-8&lt;/</code><code>project.build.sourceencoding</code><code>&gt;</code>

<code>3</code>

<code>&lt;/</code><code>properties</code><code>&gt;</code>

在需要设置字符集的地方,引用${project.build.sourceencoding}即可。

<b>2、拷贝src/main/resources/资源文件</b>

<code>01</code>

<code>&lt;</code><code>build</code><code>&gt;</code>

<code>02</code>

<code></code><code>&lt;</code><code>pluginmanagement</code><code>&gt;</code>

<code>03</code>

<code></code><code>&lt;</code><code>plugins</code><code>&gt;</code>

<code>04</code>

<code></code><code>&lt;</code><code>plugin</code><code>&gt;</code>

<code>05</code>

<code></code><code>&lt;</code><code>groupid</code><code>&gt;org.apache.maven.plugins&lt;/</code><code>groupid</code><code>&gt;</code>

<code>06</code>

<code></code><code>&lt;</code><code>artifactid</code><code>&gt;maven-resources-plugin&lt;/</code><code>artifactid</code><code>&gt;</code>

<code>07</code>

<code></code><code>&lt;</code><code>version</code><code>&gt;2.5&lt;/</code><code>version</code><code>&gt;</code>

<code>08</code>

<code></code><code>&lt;</code><code>executions</code><code>&gt;</code>

<code>09</code>

<code></code><code>&lt;</code><code>execution</code><code>&gt;</code>

<code>10</code>

<code></code><code>&lt;</code><code>id</code><code>&gt;copy-resources&lt;/</code><code>id</code><code>&gt;</code>

<code>11</code>

<code></code><code>&lt;</code><code>phase</code><code>&gt;package&lt;/</code><code>phase</code><code>&gt;</code>

<code>12</code>

<code></code><code>&lt;</code><code>goals</code><code>&gt;</code>

<code>13</code>

<code></code><code>&lt;</code><code>goal</code><code>&gt;copy-resources&lt;/</code><code>goal</code><code>&gt;</code>

<code>14</code>

<code></code><code>&lt;/</code><code>goals</code><code>&gt;</code>

<code>15</code>

<code></code><code>&lt;</code><code>configuration</code><code>&gt;</code>

<code>16</code>

<code></code><code>&lt;</code><code>encoding</code><code>&gt;${project.build.sourceencoding}&lt;/</code><code>encoding</code><code>&gt;</code>

<code>17</code>

<code></code><code>&lt;</code><code>outputdirectory</code><code>&gt;${project.build.directory}&lt;/</code><code>outputdirectory</code><code>&gt;</code>

<code>18</code>

<code></code><code>&lt;</code><code>resources</code><code>&gt;</code>

<code>19</code>

<code></code><code>&lt;</code><code>resource</code><code>&gt;</code>

<code>20</code>

<code></code><code>&lt;</code><code>directory</code><code>&gt;src/main/resources/&lt;/</code><code>directory</code><code>&gt;</code>

<code>21</code>

<code></code><code>&lt;</code><code>includes</code><code>&gt;</code>

<code>22</code>

<code></code><code>&lt;</code><code>include</code><code>&gt;*.properties&lt;/</code><code>include</code><code>&gt;</code>

<code>23</code>

<code></code><code>&lt;</code><code>include</code><code>&gt;*.xml&lt;/</code><code>include</code><code>&gt;</code>

<code>24</code>

<code></code><code>&lt;/</code><code>includes</code><code>&gt;</code>

<code>25</code>

<code></code><code>&lt;</code><code>filtering</code><code>&gt;true&lt;/</code><code>filtering</code><code>&gt;</code>

<code>26</code>

<code></code><code>&lt;/</code><code>resource</code><code>&gt;</code>

<code>27</code>

<code></code><code>&lt;/</code><code>resources</code><code>&gt;</code>

<code>28</code>

<code></code><code>&lt;/</code><code>configuration</code><code>&gt;</code>

<code>29</code>

<code></code><code>&lt;/</code><code>execution</code><code>&gt;</code>

<code>30</code>

<code></code><code>&lt;/</code><code>executions</code><code>&gt;</code>

<code>31</code>

<code></code><code>&lt;/</code><code>plugin</code><code>&gt;</code>

<code>32</code>

<code></code><code>&lt;/</code><code>plugins</code><code>&gt;</code>

<code>33</code>

<code></code><code>&lt;/</code><code>pluginmanagement</code><code>&gt;</code>

<code>34</code>

<code>&lt;/</code><code>build</code><code>&gt;</code>

<b>3、编译代码</b>

<code></code><code>&lt;</code><code>artifactid</code><code>&gt;maven-compiler-plugin&lt;/</code><code>artifactid</code><code>&gt;</code>

<code></code><code>&lt;</code><code>source</code><code>&gt;1.7&lt;/</code><code>source</code><code>&gt;</code>

<code></code><code>&lt;</code><code>target</code><code>&gt;1.7&lt;/</code><code>target</code><code>&gt;</code>

可以指定源代码编译级别。

<b>4、编译打包成jar文件</b>

<code></code><code>&lt;</code><code>artifactid</code><code>&gt;maven-jar-plugin&lt;/</code><code>artifactid</code><code>&gt;</code>

<code></code><code>&lt;</code><code>goal</code><code>&gt;jar&lt;/</code><code>goal</code><code>&gt;</code>

<code></code><code>&lt;</code><code>classifier</code><code>&gt;without-configs&lt;/</code><code>classifier</code><code>&gt;</code>

<code></code><code>&lt;</code><code>excludes</code><code>&gt;</code>

<code></code><code>&lt;</code><code>exclude</code><code>&gt;*.properties&lt;/</code><code>exclude</code><code>&gt;</code>

<code></code><code>&lt;</code><code>exclude</code><code>&gt;*.xml&lt;/</code><code>exclude</code><code>&gt;</code>

<code></code><code>&lt;/</code><code>excludes</code><code>&gt;</code>

可以指定打包后jar文件的文件名后缀,同时可以设置是否将配置文件也打包到jar文件中。

<b>5、构建测试用例配置</b>

<code></code><code>&lt;</code><code>artifactid</code><code>&gt;maven-surefire-plugin&lt;/</code><code>artifactid</code><code>&gt;</code>

<code></code><code>&lt;</code><code>version</code><code>&gt;2.9&lt;/</code><code>version</code><code>&gt;</code>

<code></code><code>&lt;</code><code>skip</code><code>&gt;true&lt;/</code><code>skip</code><code>&gt;</code>

<code></code><code>&lt;</code><code>testfailureignore</code><code>&gt;true&lt;/</code><code>testfailureignore</code><code>&gt;</code>

构建应用时,可以配置是否执行测试用例代码,也可以配置如果测试用例未通过是否忽略。

<b>6、输出依赖jar文件到指定目录</b>

<code></code><code>&lt;</code><code>groupid</code><code>&gt;org.eclipse.m2e&lt;/</code><code>groupid</code><code>&gt;</code>

<code></code><code>&lt;</code><code>artifactid</code><code>&gt;lifecycle-mapping&lt;/</code><code>artifactid</code><code>&gt;</code>

<code></code><code>&lt;</code><code>version</code><code>&gt;1.0.0&lt;/</code><code>version</code><code>&gt;</code>

<code></code><code>&lt;</code><code>lifecyclemappingmetadata</code><code>&gt;</code>

<code></code><code>&lt;</code><code>pluginexecutions</code><code>&gt;</code>

<code></code><code>&lt;</code><code>pluginexecution</code><code>&gt;</code>

<code></code><code>&lt;</code><code>pluginexecutionfilter</code><code>&gt;</code>

<code></code><code>&lt;</code><code>artifactid</code><code>&gt;maven-dependency-plugin&lt;/</code><code>artifactid</code><code>&gt;</code>

<code></code><code>&lt;</code><code>versionrange</code><code>&gt;[2.0,)&lt;/</code><code>versionrange</code><code>&gt;</code>

<code></code><code>&lt;</code><code>goal</code><code>&gt;copy-dependencies&lt;/</code><code>goal</code><code>&gt;</code>

<code></code><code>&lt;</code><code>goal</code><code>&gt;unpack&lt;/</code><code>goal</code><code>&gt;</code>

<code></code><code>&lt;/</code><code>pluginexecutionfilter</code><code>&gt;</code>

<code></code><code>&lt;</code><code>action</code><code>&gt;</code>

<code></code><code>&lt;</code><code>ignore</code> <code>/&gt;</code>

<code></code><code>&lt;/</code><code>action</code><code>&gt;</code>

<code></code><code>&lt;/</code><code>pluginexecution</code><code>&gt;</code>

<code></code><code>&lt;/</code><code>pluginexecutions</code><code>&gt;</code>

<code></code><code>&lt;/</code><code>lifecyclemappingmetadata</code><code>&gt;</code>

<code>35</code>

<code></code><code>&lt;</code><code>version</code><code>&gt;2.8&lt;/</code><code>version</code><code>&gt;</code>

<code>36</code>

<code>37</code>

<code>38</code>

<code></code><code>&lt;</code><code>id</code><code>&gt;copy-dependencies&lt;/</code><code>id</code><code>&gt;</code>

<code>39</code>

<code>40</code>

<code>41</code>

<code>42</code>

<code>43</code>

<code>44</code>

<code></code><code>&lt;</code><code>outputdirectory</code><code>&gt;${project.build.directory}/lib&lt;/</code><code>outputdirectory</code><code>&gt;</code>

<code>45</code>

<code></code><code>&lt;</code><code>overwritereleases</code><code>&gt;false&lt;/</code><code>overwritereleases</code><code>&gt;</code>

<code>46</code>

<code></code><code>&lt;</code><code>overwritesnapshots</code><code>&gt;false&lt;/</code><code>overwritesnapshots</code><code>&gt;</code>

<code>47</code>

<code></code><code>&lt;</code><code>overwriteifnewer</code><code>&gt;true&lt;/</code><code>overwriteifnewer</code><code>&gt;</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>&lt;</code><code>repositories</code><code>&gt;</code>

<code></code><code>&lt;</code><code>repository</code><code>&gt;</code>

<code></code><code>&lt;</code><code>id</code><code>&gt;cloudera&lt;/</code><code>id</code><code>&gt;</code>

<code>4</code>

<code>5</code>

<code></code><code>&lt;/</code><code>repository</code><code>&gt;</code>

<code>6</code>

<code>&lt;/</code><code>repositories</code><code>&gt;</code>

如果我们需要要的一些依赖jar文件在maven中央repository中没有,可以在pom文件中配置特定的repository,一般需要配置id和url。

<b>8、将应用及其依赖jar文件打成一个jar文件</b>

<code></code><code>&lt;</code><code>artifactid</code><code>&gt;maven-assembly-plugin&lt;/</code><code>artifactid</code><code>&gt;</code>

<code></code><code>&lt;</code><code>archive</code><code>&gt;</code>

<code></code><code>&lt;</code><code>manifest</code><code>&gt;</code>

<code></code><code>&lt;</code><code>mainclass</code><code>&gt;org.shirdrn.solr.cloud.index.hadoop.solrcloudindexer&lt;/</code><code>mainclass</code><code>&gt;</code>

<code></code><code>&lt;/</code><code>manifest</code><code>&gt;</code>

<code></code><code>&lt;/</code><code>archive</code><code>&gt;</code>

<code></code><code>&lt;</code><code>descriptorrefs</code><code>&gt;</code>

<code></code><code>&lt;</code><code>descriptorref</code><code>&gt;jar-with-dependencies&lt;/</code><code>descriptorref</code><code>&gt;</code>

<code></code><code>&lt;/</code><code>descriptorrefs</code><code>&gt;</code>

<code></code><code>&lt;</code><code>id</code><code>&gt;make-assembly&lt;/</code><code>id</code><code>&gt;</code>

<code></code><code>&lt;</code><code>goal</code><code>&gt;single&lt;/</code><code>goal</code><code>&gt;</code>