John Jiang

a cup of Java, cheers!
https://github.com/johnshajiang/blog

   :: 首页 ::  :: 联系 :: 聚合  :: 管理 ::
  131 随笔 :: 1 文章 :: 530 评论 :: 0 Trackbacks
最大限度利用Maven settings.xml文件
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会议--很快在堪培拉,悉尼,布里斯班和惠灵顿就有研讨会了。

posted on 2009-08-14 19:13 John Jiang 阅读(2328) 评论(2)  编辑  收藏 所属分类: MavenJava翻译Build

评论

# re: 最大限度利用Maven settings.xml文件(译) 2011-12-26 10:19 飞天奔月
谢谢

原来 pom 里面可以引用setting里面的变量  回复  更多评论
  

# re: 最大限度利用Maven settings.xml文件(译) 2011-12-26 16:08 Sha Jiang
@飞天奔月
时间太长了,我自己都忘了@_@  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: