那些关注 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时遇到问题
- 获取最新的CVS
- 确保您的build.properties文件中不包含对版本或补丁级别的引用
- 运行ant clean build
- 如果构建失败是由于
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。 - 在论坛上报告您的问题!
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中缺乏依赖配置文件,这是一个相当复杂的任务)。