2014-03-13 32 views
1

我們有許多基於螞蟻的項目取決於我們的常春藤解析器定義的單個ivysettings.xml。我正在創建一個新的基於的項目,根據DRY原則,我希望sbt也依賴於這個相同的ivysettings.xml文件(而不是試圖在sbt腳本中重新定義解析器)。事實證明這很簡單,至少使用externalIvySettings()來解決依賴關係。在sbt中,我如何發佈到在外部常青藤設置文件中定義的解析器?

但是,我們還需要發佈到文件中定義的解析器之一。在螞蟻中,這很容易:<ivy:publish resolver="..." />",但是我很難過。 Sbt有一個publishTo設置可以用來定義發佈到解析器,但我不想定義一個新的解析器。相反,我想從externalIvySettings()加載的設置中解析出一個解析器,並將其傳遞給publishTo。這可能嗎?

編輯:

這裏是ivysettings.xml文件的要求。我們想發佈到「模塊」解析器。

<ivysettings> 

    <properties file="${ivy.settings.dir}/ivysettings.properties" /> 

    <settings defaultResolver="default" defaultResolveMode="dynamic"/> 

    <property name="x1.resolver"   value="x1-fs" override="false"/> 
    <property name="x2.resolver"   value="x2-fs" override="false"/> 

    <property name="x1.ivy.pattern"  value="[organisation]/[module]/[revision]/[type]s/[artifact].[ext]" override="true"/> 
    <property name="x1.artifact.pattern" value="[organisation]/[module]/[revision]/[type]s/[artifact].[ext]" override="true"/> 

    <property name="x2.ivy.pattern"  value="[organisation]/[module]/[revision]/[type]s/[artifact].[ext]" override="true"/> 
    <property name="x2.artifact.pattern" value="[organisation]/[module]/[revision]/[type]s/[artifact].[ext]" override="true"/> 

    <property name="local.root"    value="${ivy.default.ivy.user.dir}/x1-local" override="true"/> 
    <property name="local.ivy.pattern"  value="[organisation]/[module]/[revision]/[type]s/[artifact].[ext]" override="true"/> 
    <property name="local.artifact.pattern" value="[organisation]/[module]/[revision]/[type]s/[artifact].[ext]" override="true"/> 

    <property name="modules.root"    value="${ivy.settings.dir}/ivy/published" override="true"/> 
    <property name="modules.ivy.pattern"  value="[organisation]/[module]/[revision]/[type]s/[artifact].[ext]" override="true"/> 
    <property name="modules.artifact.pattern" value="[organisation]/[module]/[revision]/[type]s/[artifact].[ext]" override="true"/> 

    <!-- some default values for paths to the x2 and x1 repositories; these should be overridden in ivysettings.properties --> 
    <property name="x2.fs.root" value="${ivy.settings.dir}/ivy/x2root" override="false"/> 
    <property name="x1.fs.root" value="${ivy.settings.dir}/ivy/x1root" override="false"/> 

    <property name="ivy.cache.dir" value="${ivy.settings.dir}/ivy/cache"/> 

    <caches defaultCacheDir="${ivy.cache.dir}"/> 

    <resolvers> 
    <filesystem name="x1-fs"> 
     <ivy pattern="${x1.fs.root}/${x1.ivy.pattern}" /> 
     <artifact pattern="${x1.fs.root}/${x1.artifact.pattern}" /> 
    </filesystem> 

    <filesystem name="x2-fs"> 
     <ivy pattern="${x2.fs.root}/${x2.ivy.pattern}" /> 
     <artifact pattern="${x2.fs.root}/${x2.artifact.pattern}" /> 
    </filesystem> 

    <chain name="x1"> 
    <resolver ref="${x1.resolver}"/> 
    </chain> 

    <chain name="x2"> 
    <resolver ref="${x2.resolver}"/> 
    </chain> 

    <filesystem name="local"> 
     <ivy pattern="${local.root}/${local.ivy.pattern}" /> 
     <artifact pattern="${local.root}/${local.artifact.pattern}" /> 
    </filesystem> 

    <filesystem name="modules" checkmodified="true" changingPattern="*" changingMatcher="glob"> 
     <ivy pattern="${modules.root}/${modules.ivy.pattern}" /> 
     <artifact pattern="${modules.root}/${modules.artifact.pattern}" /> 
    </filesystem> 

    <chain name="main" dual="true"> 
     <resolver ref="modules"/> 
     <resolver ref="x1"/> 
     <resolver ref="x2"/> 
    </chain> 

    <chain name="default" returnFirst="true"> 
     <resolver ref="local"/> 
     <resolver ref="main"/> 
    </chain> 

    </resolvers> 

</ivysettings> 
+0

,你能否告訴出版解析的XML定義來發布? – laughedelic

回答

相關問題