注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

无线时代辐射无穷

抓紧生宝宝,小心辐射

 
 
 

日志

 
 

最大限度利用Maven settings.xml文件(转 )  

2009-12-27 10:56:10|  分类: maven |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
John Ferguson在他的最新Blog中,介绍了使用Maven settings.xml文件的一些鲜为人知的技巧,希望对大家也有所助益。(2009.08.14最后更新)

如果你在任何程度中使用过Maven,你应该知道settings.xml文件。settings.xml文件包含有与系统环境相关的配置细节,例如代理配置,仓库,服务器的用户名和密码,等等。
下面是一个典型的settings.xml文件的示例:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation
="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd"
>
  
<localRepository>C:/maven/repository</localRepository>

  
<proxies>
    
<proxy>
      
<id>localproxy</id>
      
<active>true</active>
      
<protocol>http</protocol>
      
<host>proxy.acme.com</host>
      
<port>8080</port>
      
<username>scott</username>
      
<password>t0ps3cr3t</password>
      
<nonProxyHosts>*.acme.com</nonProxyHosts>
    
</proxy>
  
</proxies>
  
  
<servers>
    
<server>
      
<id>dbserver</id>
      
<username>scott</username>
      
<password>tiger</password>
    
</server>
  
</servers>
  
</settings>
例如,若你使用公司的环境,在该环境中,你的Maven主目录是每天早晨当你登录时由网络传输的,localRepository元素就会非常有用。在这种情况 下,将本地仓库置于你本地磁盘的不同目录中,将会节约大量的带宽。
你也可以在settings.xml文件中定义仓库,镜像,概述和属性。在此处,我不想涉及上述内容,因为在其它地方已经有关于它们的很好的文档了。
很少为人所知,或至少是很少被使用的功能是,
在你的pom.xml文件中使用定义在settings.xml文件中的数据。事实上,你能使用settings.xml中的任一元素,然而其中的一些则更为有用。
一个普遍且方便的例子就是使用localRepository变量。你可能需要将该变量置于一个脚本中,或使用它来引用仓库中的某个特定的JAR文件(尽管通常有更优雅的方案来解决这一问题)。你可以通过简单地引用${settings.localRepository}来使用localRepository属性。例如,在下面的代码中,我们调用一个Ant脚本,并通过名为"localRepository"的属性传给它一个本地仓库路径:
<plugin>
  
<groupId>org.apache.maven.plugins</groupId>
  
<artifactId>maven-antrun-plugin</artifactId>
  
<executions>
    
<execution>
      
<id>generate-stuff</id>
      
<phase>pre-comile</phase>
      
<goals>
        
<goal>run</goal>
      
</goals> 
      
<configuration>
        
<tasks>
          
<ant target="generate">
            
<property name="localRepository"  value="${settings.localRepository}"/>
          
</ant>
        
</tasks>
      
</configuration>
    
</execution>
  
</executions>
</plugin>
做更多有趣的事情,特别是当你也在构建中集成了Groovy时。例如,假设在集成测试阶段期间,我们需要确保特定的SQL脚本已在数据库中执行过了。我们有一个名为update-scripts.groovy的Groovy脚本来做这件事情,但它需要以命令行参数的形式提供用户名和密码。在集成测试阶段之前,你应如何使用定义在settings.xml中的用户名和密码呢?是的,只需一点儿Groovy魔术,没有比这儿更简单的了。settings对象可用于任何集成到pom.xml中的Groovy脚本,所以你可像使用一个普通对象那样方便地使用它,如下示例:
<plugin>
  
<groupId>org.codehaus.groovy.maven</groupId>
  
<artifactId>gmaven-plugin</artifactId>
  
<version>1.0-rc-5</version>
  
<executions>
    
<execution>
      
<id>process-db-scripts</id>
      
<phase>pre-integration-test</phase>
      
<goals>
        
<goal>execute</goal>
      
</goals> 
      
<configuration>
        
<source>
        def server = settings.servers.find{ it.id.equals('dbserver') }
        """groovy update-scripts.groovy -Ddb.username=${server.username} 
        -Ddb.password=${server.password}""".execute()
        
</source>
      
</configuration>
    
</execution>
  
</executions>
</plugin>
简单!事实上,一旦你既知道如何访问顶级变量,又知道如何访问settings.xml中的各个元素,那么其功效将不可限量!只需记住一定要使你的构建保持弹性--例如,不要在settings.xml文件中定义那些在pom.xml文件中无有效默认值的属性。
如果你想学习更多关于应用Maven的酷炫方法,查看最新的来自于Sonatype的在线课程。或者,为了有一个更具全景的视角,可以参加Java Power Tools bootcamp会议--很快在堪培拉,悉尼,布里斯班和惠灵顿就有研讨会了。
  评论这张
 
阅读(437)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017