2013-10-07 160 views
3

我的目標是要劃定項目傳遞依賴成若干不渡套:如何減去常春藤依賴集

  • 系統(罐已經存在於J2EE容器;具有明確的固定版本手動列出)
  • 提供(罐被複制到J2EE容器;手動列出)
  • 耳(罐子待包裝耳/ lib下,其餘部分)內

我下面列出當前的解決方案有一定的shortco mings:

  • 必須排除系統和由不是已經明確排除可能會意外地得到耳朵
  • 一個
  • 新的第三方傳遞DEPS提供從耳朵的conf一個庫,有時不得不增加明確override複製庫名稱和版本

是否有一些方法可以消除這些缺點?

這將是很好能夠以某種方式定義一個的conf爲他人的依賴集減法的結果(優美解決衝突): 耳=運行 - 系統 - 提供

也許<conf name="ear" extends="runtime,!system,!provided"/>符號在IVY-982得到修復時可以被支持。

尋找適用的實際解決方案。

即使願意考慮切換到gradle,如果它有一個解決方案。

<?xml version="1.0" encoding="UTF-8"?> 
<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"> 

    <info organisation="example.com" module="parent"/> 

    <configurations defaultconfmapping="compile->@;runtime->@;system->master;provided->runtime;ear->runtime;test->test(default)"> 
     <conf name="compile"/> 
     <conf name="runtime" extends="compile"/> 
     <conf name="ear" extends="runtime" description="Libs to be packed inside ear"/> 
     <conf name="provided" description="Libs to copy to j2ee container"/> 
     <conf name="system" description="Libs already present in j2ee container"/> 
     <conf name="test" extends="ear,provided,system" description="Simulate container environment. Used by unit tests to catch dependency compatibility problems."/> 
    </configurations> 

    <dependencies> 
     <dependency org="log4j" name="log4j" rev="1.2.15" force="true" conf="system"/> 
     <dependency org="commons-collections" name="commons-collections" rev="3.1" force="true" conf="system"/> 
     <dependency org="commons-lang" name="commons-lang" rev="2.2" force="true" conf="system"/> 

     <dependency org="org.apache.velocity" name="velocity" rev="1.7" force="true" conf="provided"/> 
     <dependency org="org.slf4j" name="slf4j-api" rev="1.5.6" force="true" conf="provided"/> 
     <dependency org="org.slf4j" name="slf4j-log4j12" rev="1.5.6" force="true" conf="provided"/> 
     <!-- ... --> 

     <dependency name="module1" rev="latest.integration" conf="runtime,ear,provided,test"/> 
     <dependency name="module2" rev="latest.integration" conf="runtime,ear,provided,test"/> 
     <!-- ... --> 

     <exclude org="commons-collections" conf="ear,provided"/> 
     <exclude org="commons-lang" conf="ear,provided"/> 
     <exclude org="org.apache.velocity" conf="ear"/> 
     <!-- TODO: negation not working: https://issues.apache.org/jira/browse/IVY-982 --> 
     <!--<exclude org="org.slf4j" conf="*, !provided"/>--> 
     <exclude org="org.slf4j" conf="ear,test"/> 
     <!-- ... --> 

     <override org="org.slf4j" rev="1.5.6"/> 
     <override org="commons-collections" module="commons-collections" rev="3.1"/> 
     <override org="commons-lang" module="commons-lang" rev="2.2"/> 
     <!-- ... --> 
    </dependencies> 

</ivy-module> 

Sample項目源進行實驗,可以在IVY-1443附件中找到。

+1

如果您不知道解決方案,請對此評論投贊成票,但請考慮此類功能請求。沉默讓我感到害怕。 ) – Vadzim

+0

這是如何提供排除可以用maven完成:http://stackoverflow.com/questions/1459021/excluding-provided-dependencies-from-maven-assembly – Vadzim

+0

它似乎有可能與gradle:http:// stackoverflow.com/questions/15507215/copy-dependencies-excluding-some-configuration/ – Vadzim

回答

3

雖然提供依賴排除可能與MavenGradle,但似乎目前沒有辦法輕鬆實現它與常春藤。

更新

在某些情況下,任務可以與周圍的中間引起模塊和negative regexp口罩工作:

<dependency org="com.company" name="root.module" conf="ear" rev="latest.integration"> 
     <exclude org="^(?!com.company).*$" matcher="regexp"/> 
    </dependency> 

但是我們已經轉移到搖籃的常春藤似乎失去動力。