2011-02-15 91 views
3

我需要用我自己的實現替換一些Maven默認功能,並且我正在尋找一種乾淨的方式來實現這一點。替換Maven 3中的plexus組件3

我已經擴展org.apache.maven.repository.internal.DefaultVersionRangeResolver和使用component.xml文件如下注冊我的擴展組件:

<component-set> 
    <components> 
     <component> 
      <role>org.sonatype.aether.impl.VersionRangeResolver</role> 
      <role-hint>default</role-hint> 
      <implementation>com.my.custom.VersionRangeResolver 
      </implementation> 
      <isolated-realm>false</isolated-realm> 
      <requirements> 
       <requirement> 
        <role>org.sonatype.aether.spi.log.Logger</role> 
        <role-hint /> 
        <field-name>logger</field-name> 
       </requirement> 
       <requirement> 
        <role>org.sonatype.aether.spi.log.Logger</role> 
        <role-hint /> 
        <field-name>logger2</field-name> 
       </requirement> 
       <requirement> 
        <role>org.sonatype.aether.impl.MetadataResolver</role> 
        <role-hint /> 
        <field-name>metadataResolver</field-name> 
       </requirement> 
      </requirements> 
     </component> 
    </components> 
</component-set> 

我已經安裝了包含這在我的本地回購的項目,我像這樣引用它在其它項目pom.xml:

<build> 
    <extensions> 
     <extension> 
      <groupId>my.groupId</groupId> 
      <artifactId>maven-version-resolver</artifactId> 
      <version>SNAPSHOT</version> 
     </extension> 
    </extensions> 
</build> 

但是,我的工件沒有使用。當我在build中運行這個小GMaven groovy腳本時:它顯示了默認實現和我自己的實現,兩者均使用提示「default」,這兩個腳本都是在默認實現下運行的。那我該如何解決這個問題?

  • 我是否需要在components.xml中設置一個附加參數(可能是更高的優先級)?
  • 我是否需要將我的組件編寫爲Maven插件並以編程方式主動註冊組件?
  • 是否有任何Plexus文檔涵蓋此?
+0

嘿,你有沒有試過用Maven 3.3擴展機制?也可以擴展核心機制。 – splatch 2017-01-24 16:58:09

回答

3

這是非常晚的答案,但我希望它會幫助這些在maven-core中遇到類似問題。

使用Maven 3.3.1可以使用在項目根目錄中定義的自定義核心擴展,並且不需要對命令參數或maven安裝進行任何修改:https://maven.apache.org/docs/3.3.1/release-notes.html#Core_Extensions

我有像你一樣的問題來定製版本範圍的決議,並設法使其工作。我的第一個工作實現標記在這裏:https://github.com/splatch/maven-osgi-resolver/tree/3.3.9-a。我向前推了一些代碼,但是這個標籤包含了你需要的所有東西來定製版本範圍處理。

一般魔鬼坐在細節 - 你必須使用叢註釋和META-INF/maven/extension.xml出口包plexus-components.xml申報,否則它將無法正常工作。

3

顯然問題是我的組件定義註冊太遲。在解析pom <extension>時,常規DefaultVersionRangeResolver已被實例化。

該解決方案更是一個黑客:

  1. $MAVEN_HOME創建一個目錄,並把你的 成分有
  2. 在 $ MAVEN_HOME`註冊它們/斌/ m2.conf

    main is org.apache.maven.cli.MavenCli from plexus.core 
    
    set maven.home default ${user.home}/m2 
    
    [plexus.core] 
    load ${maven.home}/ext/*.jar 
    load ${maven.home}/lib/*.jar 
    

    (如您所見ext/.*lib/.*之前加載)

由於我的組件是爲了添加站點範圍的功能,我現在必須創建一個插件來安裝和執行這些擴展。