2

我正在考虑一个 DSL / 域设计来分析一大堆 Maven 依赖项。

输入是一个 poms 列表(实际上是 poms 和物理位置之间的映射),我认为它将被解析为“平面”(即非递归)文件,以一些不错的 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. 继承:由 <parent> 和 <modules>
  2. 依赖项:通过 <依赖项>
  3. 物理:文件系统/svn dir-layout

问题:这些应该如何设计?

我心中的一些可能性:

  1. 将结构强加于模块本身,例如通过使依赖项列表可变,并将其类型更改为 List(Either(Artifact,Module))。
  2. 复用集合 API,将继承树映射到 Tree(Module)。但是依赖呢?
  3. 设计全新的结构并将 pom 列表映射到此
  4. 其他的?...

当然,我希望数据结构中包含尽可能多的信息,以避免重复计算。大纲是:

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

我想做的事情:

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

感谢您的任何见解...

4

1 回答 1

0

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

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

如果这个项目会产生有用的东西,我会把它贴在这里......

于 2012-05-04T08:00:05.137 回答