Maven 2 将Maven用于Coldfusion项目

Maven 2 将Maven用于Coldfusion项目,maven-2,coldfusion,continuous-integration,Maven 2,Coldfusion,Continuous Integration,我必须处理相当丑陋的大量ColdFusion代码,到目前为止,这些代码都是通过在生产服务器上直接修改来维护的(不要问)。我设法将它从复制和备份中清理出来,并将其放入Subversion,现在我需要选择一个make系统,以便能够将其放入连续构建(TeamCity)和计划发布中。 令我惊讶的是,我在上只找到了一篇博客文章,所以问题是——有没有人有在CF上成功使用Maven的经验,以及人们通常使用什么来管理大型CF项目? 非常感谢您的建议、提示和链接 因为我不想开始宗教战争——Maven几乎是公司标准

我必须处理相当丑陋的大量ColdFusion代码,到目前为止,这些代码都是通过在生产服务器上直接修改来维护的(不要问)。我设法将它从复制和备份中清理出来,并将其放入Subversion,现在我需要选择一个make系统,以便能够将其放入连续构建(TeamCity)和计划发布中。 令我惊讶的是,我在上只找到了一篇博客文章,所以问题是——有没有人有在CF上成功使用Maven的经验,以及人们通常使用什么来管理大型CF项目? 非常感谢您的建议、提示和链接
因为我不想开始宗教战争——Maven几乎是公司标准(vs Ant)

首先,这里是另一个你可能会觉得有用的博客

我没有尝试过用Maven构建ColdFusion,但我有为大公司管理Maven构建的经验。有一些事情需要你考虑。< /P> 项目结构

Coldfusion cfm和cfc文件应该放在src/main/resources中,以便将它们捆绑在jar中(上面引用的博客覆盖了Maven约定,将它们放在src中。这是可以的,但如果以后需要向项目添加任何其他内容,则可能会出现问题)

我可能会将cfc和cfm文件保存在单独的项目中,并使用适当的依赖项声明来链接它们,这样可以将您的cfc项目保持为库,并有助于重用。cfc项目的粒度也值得考虑。一般来说,Maven的依赖关系管理可以帮助您保持工件的小型化,而无需担心找到所有JAR

部署

交付工件的最简单方法是使用创建包含工件及其所有可传递依赖项的war。这使得每个应用程序都是自包含的,这可能很有用。这样做的缺点是,您最终会重复捆绑相同的工件,而且它们可能相当大。为了缓解这种情况,您可以使用创建自定义包(不包括通用组件),也可以指定某些组件(例如ColdSpring)是范围提供的,这意味着它们不会包含在war中

版本管理

Maven鼓励依赖项的激增,默认情况下,每个依赖项声明都有一个版本,这可能会导致维护问题,特别是当您想要升级外部依赖项的版本时。您可以通过定义父POM或“应用程序”POM来缓解这种情况。两者都有一个dependencyManagement部分,声明公共工件的详细信息(groupId、artifactId和version)。从父级继承的任何POM都不需要声明依赖项版本,因为它将被继承(注意,这并不意味着所有子级都将具有所有依赖项,只是声明依赖项的任何POM都不需要声明版本)。如果您使用打包“pom”和dependencyManagement部分定义了一个“应用程序”项目,您可以使用范围导入(从Maven 2.0.9开始)引用它,这将从“应用程序”项目导入dependencyManagement部分到项目pom。有关更多详细信息,请参阅

如果在dependencyManagement部分中声明具有作用域的依赖项,则该作用域将被继承,除非它在子POM中被重写。与上面的部署部分相关,这意味着您可以声明父级中提供的公共库范围,以确保它们不会捆绑在每个应用程序中

命名约定 您需要为包指定一个命名约定,以避免冲突。 最好遵循Maven约定,使用java包,比如GroupID(org.apache.Maven for Maven.apache.org)和工件的jar名称。这个约定将为coldspring提供groupId“org.coldspringframework”和artifactId“coldspring”

可能需要对整个公司进行进一步区分。例如,如果您有一个web和核心团队,您可以为web团队提供groupIds com.mycompany.web.*和核心团队com.mycompany.core*

依赖关系管理

您需要将您的CFC包添加到Maven存储库中,以便企业中的其他构建可以访问它们

如果您想将CFC包装与罐子分开。您可以指定自定义的打包类型,这样它们就不会与任何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>

org.coldspringframework
(按照链接了解更多详细信息。基本上,您需要创建一个带有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>

org.apache.maven.lifecycle.mapping.LifecycleMapping
氟氯化碳
org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping
插件:maven资源插件:资源
插件:maven jar插件:jar
插件:maven安装插件:安装
插件:maven部署插件:部署
org.apache.maven.artifact.handler.ArtifactHandler
氟氯化碳
org.apache.maven.artifact.handler.DefaultArtifactHandler
罐子
氟氯化碳
氟氯化碳
org.codehaus.plexus.archiver.archiver
氟氯化碳
org.codehaus.plexus.archiver.zip.ZipArchiver
每次查找
org.codehaus.plexus.archiver.UnArchiver
氟氯化碳
org.codehaus.plexus.archiver.zip.ZipUnArchiver
每次查找

Maven对我来说也很有趣,但我找不到足够的资源