Seam 发布到 Maven

发布者    |       Seam

那些关注 Seam CVS 的人可能会注意到最近对构建系统的许多更改。我将在下面简要介绍它们,并讨论它们如何影响您使用 Seam。

Maven

我们选择使用 Maven 来管理 Seam 依赖,因为它提供了对传递依赖的合理支持,它正在成为 Java 企业世界和 JBoss.org 的既定标准,像 Ant(使用 Maven Ant Tasks)和 Ivy 这样的工具可以消费 Maven POM,将 Seam 发布到 Maven 的 40 多票促使我们这样做 ;)

使用 Maven 与 Seam

对于你们中间的 Maven 专家,以下是您开始所需的基本信息。如果您正在考虑尝试 Maven,那么您可能希望等待几周,等待 Seam 2.0.0.GA 的发布,它将包含使用 Maven 与 Seam 相关的简要教程。

为了检查支持,您需要在您的 POM 中添加 http://snapshots.jboss.org/maven2 作为快照仓库;完成后,您可以将 Seam 添加到项目的 POM 中

<dependency>
  <groupId>org.jboss.seam</groupId>
  <artifactId>jboss-seam</artifactId>
</dependency>
<dependency>
  <groupId>org.jboss.seam</groupId>
  <artifactId>jboss-seam-ui</artifactId>
</dependency>
<dependency>
  <groupId>org.jboss.seam</groupId>
  <artifactId>jboss-seam-pdf</artifactId>
</dependency>
<dependency>
  <groupId>org.jboss.seam</groupId>
  <artifactId>jboss-seam-remoting</artifactId>
</dependency>
<dependency>
  <groupId>org.jboss.seam</groupId>
  <artifactId>jboss-seam-ioc</artifactId>
</dependency>
<dependency>
  <groupId>org.jboss.seam</groupId>
  <artifactId>jboss-seam-ioc</artifactId>
</dependency>

我们很快将从我们的持续集成服务器发布快照。

由于 Seam 是一个集成框架,我们花费了大量时间确保集成库能够很好地协同工作,既与 Seam 一起,也与 Seam。如果您希望始终使用 Seam 推荐的库版本,您可能希望使用 Seam 根 POM(它仅声明仓库和依赖管理)作为您的父 POM

<parent>
  <groupId>org.jboss.seam</groupId>
  <artifactId>root</artifactId>
  <version>2.0.0.SNAPSHOT</version>
</parent>

然后,您只需在您的 POM 中声明您的依赖项 无版本

<dependency>
  <groupId>org.jboss.seam</groupId>
  <artifactId>jboss-seam</artifactId>
</dependency>

<dependency>
  <groupId>org.jboss.seam</groupId>
  <artifactId>jboss-seam-ui</artifactId>
</dependency>

<dependency>
  <groupId>org.jbpm</groupId>
  <artifactId>jbpm-jpdl</artifactId>
</dependency>

然后您将获得 Seam 核心、ui 和 jBPM jPDL 3.2.1 的快照。

Maven/Dependency Management 路线图

那么,还有什么计划呢?

  • 编写一些文档!
  • 发布 Seam 的下一个版本到 http://repository.jboss.org
  • 改进构建脚本中 JBoss Embedded 的处理
  • 更改seamdiscs示例以使用 Maven 进行依赖管理
  • 在seam-gen中提供使用基于Maven的依赖管理选项

反馈和故障排除

虽然这是一个好的开始,但还有一些需要解决的难题!我非常希望得到对这个功能的强烈(并且迅速)的反馈,以便在GA版本中做得完美。

我有几个问题/讨论点要问各位maven专家

  • 有没有办法将外部属性读入maven?因为我们使用Maven Ant Tasks,所以不能使用-Dproperty=foo并且我们需要能够指定相对于POM位置的属性文件。
  • 有没有一种优雅的方式来提供依赖配置文件,而不需要到处放置空jar包?
  • 使用Seam根POM作为父POM是一种可接受的替代方案吗?

如果您正在跟踪Seam CVS并且构建Seam时遇到问题

  1. 获取最新的CVS
  2. 确保您的build.properties文件中不包含对版本补丁级别的引用
  3. 运行ant clean build
  4. 如果构建失败是由于
    The <urn:maven-artifact-ant:dependencies> type doesn't support the "versionsid" attribute.
    您可能在类路径上有一个较旧的maven-ant-tasks.jar版本尝试运行ant -nouserlib或更新Maven Ant Tasks到2.0.7。
  5. 在论坛上报告您的问题!

Maven在Seam中

那么,我们是如何使用Seam和Maven Ant Tasks来构建Seam的呢?

使用Maven构建Seam

尽管Maven在依赖管理方面做得很好,但我们并不喜欢使用Maven来构建软件(它似乎很慢,并且非常受限),所以我们选择了折中的方案,使用Maven Ant Tasks——本质上是一组调用Maven的ant任务。通过这种方式,我们可以使用Ant从Maven POM文件中加载依赖关系,并将工件发布到Maven。

CVS中的Seam构建使用Maven POM文件来声明依赖关系。这些pom文件存储在/build并且,使用一些Ant替换过滤器,被复制到/classes/poms。从这些poms中,我们可以构建路径(用于编译Seam),文件集(使用Maven Ant Tasks),并可以使用方便的版本映射器(允许您复制一个依赖文件集,同时去除版本信息,例如。org/jboss/seam/jboss-el/2.0.0.BETA1/jboss-el-2.0.0.BETA1.jar被复制到/jboss-el.jar).

更多详细信息请参阅/build/readme.txt

示例和Seam-gen

目前我们仍然坚持使用ant进行构建,并在build.xml中声明依赖关系。为此,我们将Seam及其依赖关系(使用Maven解决)复制到一个临时区域,然后针对此目录构建可部署的工件。这样做的好处是无需为每个示例编写POM(考虑到Maven中缺乏依赖配置文件,这是一个相当复杂的任务)。


返回顶部