首先,这是您可能会发现有帮助的另一个博客。
构建工具-maven-和-coldfusion http://maximporges.blogspot.com/2007/09/build-tools-maven-and-coldfusion.html
我没有尝试过使用 Maven 构建 ColdFusion,但我有为一家大公司管理 Maven 构建的经验。有几件事需要您考虑。
项目结构
Coldfusion cfm 和 cfc 文件应放入 src/main/resources 中,以便将它们捆绑在 jar 中(上面引用的博客覆盖了 Maven 约定,将它们放入 src 中。这是可以的,但如果您稍后需要,可能会出现问题将其他任何内容添加到项目中)。
我可能会将 cfc 和 cfm 文件保留在单独的项目中,并使用适当的依赖项声明来链接它们,这使您的 cfc 项目保持为库并有助于重用。还值得考虑氟氯化碳项目的粒度。一般来说,Maven 的依赖管理可以帮助您保持较小的工件,几乎不需要担心找到所有的 jar。
部署
交付工件的最简单方法是使用Maven 战争插件 http://maven.apache.org/plugins/maven-war-plugin/创建一场包含您的工件及其所有传递依赖项的战争。这使得每个应用程序都是独立的,这很有用。这样做的缺点是您最终会重复捆绑相同的工件,而且它们可能会非常大。为了缓解这种情况,您可以使用组装插件 http://maven.apache.org/plugins/maven-assembly-plugin/创建不包括公共组件的自定义包,或者您可以指定某些组件(例如 ColdSpring)是范围provided,这意味着他们不会被卷入战争。
版本管理
Maven 鼓励依赖项的扩散,默认情况下每个依赖项声明都有一个版本,这可能会导致维护问题,特别是当您想要更改外部依赖项的版本时。您可以通过定义父 POM 或“应用程序”POM 来缓解这种情况。两者都有一个 dependencyManagement 部分,声明常见工件的详细信息(groupId、artifactId 和版本)。任何从父级继承的 POM 都不需要声明依赖项版本,因为它将被继承(请注意,这并不意味着所有子级都将拥有所有依赖项,只是声明依赖项的任何 POM 都不需要声明版本)。如果您定义了一个带有打包“pom”和 dependencyManagement 部分的“app”项目,则可以使用范围引用它import(从 Maven 2.0.9 开始),这会将 dependencyManagement 部分从“app”项目导入到项目 POM。请参阅依赖文档 http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html更多细节。
如果您在 dependencyManagement 部分中声明具有范围的依赖项,则该范围将被继承,除非它在子 POM 中被覆盖。与上面的部署部分相关,这意味着您可以声明公共库范围provided在父级中,以确保它们不会捆绑在每个应用程序中。
命名约定您需要为包制定命名约定以避免冲突。
最好遵循 Maven 约定并使用类似 java 包的 groupId(对于 maven.apache.org 为 org.apache.maven)以及工件的 jar 名称。此约定将为 ColdSpring 提供 groupId“org.coldspringframework”和artifactId“coldspring”。
整个公司可能需要进一步区分。例如,如果您有一个 Web 和核心团队,您可以为 Web 团队提供 groupId com.mycompany.web.* ,为核心团队提供 com.mycompany.core.*
依赖管理
您需要将 CFC 包添加到 Maven 存储库,例如Nexus http://nexus.sonatype.org/因此整个企业的其他构建都可以访问它们。
如果您想将 CFC 包与 jar 分开。您可以指定自定义打包类型,这样它们就不会与任何 Java 工件混合。如果您创建自定义打包类型,则工件可以具有“.jar”扩展名,但任何依赖项声明都必须设置类型。
下面是遵循这些约定的示例:
<dependency>
<groupId>org.coldspringframework</groupId>
<artifactId>coldspring</artifactId>
<version>1.2</version>
<!--custom packaging type helps keep separate from Java artifacts-->
<type>cfc</type>
</dependency>
Nexus 书中有一节描述了自定义生命周期 http://www.sonatype.com/books/maven-book/reference/lifecycle-sect-other-packaging.html(点击链接了解更多详细信息。本质上,您需要创建一个带有 META-INf/plexus/components.xml 的插件来描述 plexus 机制(使用什么存档器、输出什么扩展名等)。
Components.xml 看起来像这样:
<component-set>
<components>
<component>
<role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
<role-hint>cfc</role-hint>
<implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
<configuration>
<phases>
<process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources>
<package>com.hsbc.maven.plugins:maven-jar-plugin:jar</package>
<install>org.apache.maven.plugins:maven-install-plugin:install</install>
<deploy>org.apache.maven.plugins:maven-deploy-plugin:deploy</deploy>
</phases>
</configuration>
</component>
<component>
<role>org.apache.maven.artifact.handler.ArtifactHandler</role>
<role-hint>cfc</role-hint>
<implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
<configuration>
<extension>jar</extension>
<type>cfc</type>
<packaging>cfc</packaging>
</configuration>
</component>
<component>
<role>org.codehaus.plexus.archiver.Archiver</role>
<role-hint>cfc</role-hint>
<implementation>org.codehaus.plexus.archiver.zip.ZipArchiver</implementation>
<instantiation-strategy>per-lookup</instantiation-strategy>
</component>
<component>
<role>org.codehaus.plexus.archiver.UnArchiver</role>
<role-hint>cfc</role-hint>
<implementation>org.codehaus.plexus.archiver.zip.ZipUnArchiver</implementation>
<instantiation-strategy>per-lookup</instantiation-strategy>
</component>
</components>
</component-set>