2012-04-27 42 views
2

我正在考慮一個DSL /域設計來分析一大堆maven依賴關係。爲maven-poms設計一個Scala DSL

輸入是勁歌列表(有效勁歌和物理位置之間的映射),我認爲這會被解析爲「平」(即非遞歸)文件到一些不錯的Scala類型是這樣的:

class Artifact(
    val groupId : String, 
    val artifactId : String, 
    val version : String 
) 

class Module(
    val id : Artifact, 
    val location : URI, // any good type for this ? 
    val parent : Option(Artifact), 
    val modules : List(Artifact), 
    val dependencies : List(Artifact) 
) 

再就是對 「節點」

  1. 繼承三種結構:由<父>和<模塊>
  2. 依賴關係:由<依賴>
  3. 物理:文件系統/ SVN DIR-佈局

問題:如何看待這些設計?

在我腦海裏的一些可能性:

  1. 模塊上他們的自我,例如拼版結構通過使依賴項列表可變,並將其類型更改爲List(任一(工件,模塊))。
  2. 重用集合API,並將繼承樹映射到樹(模塊)。但是什麼與依賴
  3. 設計全新結構並將poms列表映射到此
  4. 其他? ...

當然,我想在數據結構中儘可能多地提供信息以避免重複計算。輪廓是:

  1. 的平面文件解析列表
  2. 富集結構(無論是由結構更新(可變)或映射到不同的結構(不可變的/功能性的)
  3. 查詢豐富結構

事情我想這個做:

  • 找到來電的依賴
  • 發現「集羣」第n級的
  • 找關係
  • 給重構提示(上拉的依賴關係,合併模塊)
  • 渲染的pom.xml爲html,瀏覽到相關的工件。 (類似http://jarvana.com

感謝您的任何見解...

+1

你有沒有深入瞭解maven-indexer?什麼是分析依賴關係的意圖?以何種方式? – khmarbaise 2012-04-27 08:21:32

+0

@khmarbaise:不,現在我已經找到了很多我不感興趣的東西,例如重新實現「TreeNode」肯定不是我會走的路(包括使用這樣的框架)。我想要一些小巧,簡潔和可管理的東西。此外這也是scala和play的一個案例研究。最後,我們的目標是清理我們的300多個模塊:-),但之前需要進行良好的分析。 – Bastl 2012-04-27 08:39:58

+0

你想清理什麼?像未使用的依賴關係?當然如何? – khmarbaise 2012-04-27 08:51:13

回答

0

只是爲了記錄,我將實例化新的結構,基於不可變的集合(樹和scalax.graph http://www.assembla.com/spaces/scala-graph/wiki)。

爲了瀏覽poms,我會將它們渲染爲xhtml,注入依賴/繼承的鏈接,可能基於play-framework。

如果這個項目會產生一些有用的東西,我會在這裏發佈它...