为maven-poms设计Scala DSL

时间:2012-04-27 08:14:55

标签: scala maven dsl

我正在考虑使用DSL /域设计来分析大量的maven依赖项。

输入是一个poms列表(实际上是poms和物理位置之间的映射),我认为它将被解析为“平面”(即非递归)文件,如下所示:

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. 继承:由< parent>和< modules>
  2. 依赖关系:by< dependency>
  3. physical:filesystem / svn dir-layout
  4. 问题:如何设计这些?

    我心中有一些可能性:

    1. 在模块上强加自己的结构,例如:通过使依赖项列表可变,并将其类型更改为List(Either(Artifact,Module))。
    2. 重用集合API,并将继承树映射到Tree(Module)。但依赖 graph
    3. 是什么
    4. 设计全新的结构并将pom列表映射到此
    5. 其他人? ......
    6. 当然,我希望在数据结构中尽可能多地获取信息,以避免重复计算。大纲是:

      1. 解析平面文件列表
      2. 丰富到结构(通过结构更新(可变)或映射到不同的结构(不可变/功能)。
      3. 查询丰富的结构。
      4. 我想要做的事情:

        • 查找传入的依赖项
        • 找到“群集”
        • 找到n年级的关系
        • 提供重构提示(上拉依赖项,合并模块)
        • 将pom.xml渲染为html,浏览相关工件。 (类似于http://jarvana.com

        感谢您的任何见解...

1 个答案:

答案 0 :(得分:0)

仅仅为了记录,我将基于不可变集合(树和scalax.graph http://www.assembla.com/spaces/scala-graph/wiki)实例化新结构。

为了浏览poms,我将它们渲染为xhtml,注入依赖/继承的链接,可能基于play-framework。

如果这个项目能产生一些有用的东西,我会在这里发布......