使用 Maven 进行 Coldfusion 项目

2024-05-23

我必须处理相当丑陋且大量的 ColdFusion 代码,到目前为止,这些代码都是通过在生产服务器上直接修改来维护的(不要问)。我设法清除它的重复和备份并将其放入 Subversion,现在我需要选择一个 make 系统以便能够将其放入持续构建(TeamCity)和预定版本中。 令我惊讶的是,我几乎只找到了一篇博客文章如何使用Maven改造CF项目 http://maximporges.blogspot.com/2007/09/build-tools-maven-and-coldfusion.html,所以问题是 - 有没有人有在 CF 上成功使用 Maven 的经验以及一般人用什么来管理大型 CF 项目? 我们将非常感谢您的建议、提示和链接 因为我不想引发宗教战争 - Maven 几乎是公司标准(相对于 Ant)


首先,这是您可能会发现有帮助的另一个博客。

构建工具-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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Maven 进行 Coldfusion 项目 的相关文章

  • Coldfusion HMAC-SHA1 加密

    这里有一个在 javascript 中工作的 HMAC SHA1 示例 http jssha sourceforge net http jssha sourceforge net 要加密的文本 vibaHBXwUXFqVSg kTrqYJZ
  • 添加 exec-maven-plugin 的附加路径

    我想向 exec maven plugin 添加一个额外的类路径 除了 classpath之外 我想添加一个额外的路径到包含资源的目录 Users kornp resources 目前 我的 pom 看起来像这样
  • Maven 快速入门指南 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我的任务是为工作中的新程序设置开发环境 领导者选择 Eclipse 作为其 OSGi 支持的 IDE 并选择 Maven 作为构建实用程序
  • jbehave 与 jenkins 的集成

    我必须将 jbehave 与 jenkins 集成 但我不知道该怎么做 我看到我必须在 Jenkins 中创建一个任务 但我不知道应该在哪里连接 jbehave 与此任务 有人可以帮助我吗 Thanks Sarang 所以我假设您已将 JB
  • 如何编写 Maven 构建脚本来执行 Java

    如何在构建过程中或构建刚刚完成后执行 Java 程序 可以直接从 pom 中执行此操作吗 mvn exec java Dexec mainClass org sonatype mavenbook weather Main EDIT 假设我想
  • 如何仅在特定错误退出值(0 除外)上将 Jenkins 构建标记为成功?

    当我运行Execute shell构建步骤来执行脚本并且该脚本返回0 Jenkins将构建标记为SUCCESS 否则它将其标记为FAILURE这是预期的默认行为0表示没有错误 任何其他值表示有错误 有没有办法将构建标记为SUCCESS仅当返
  • 如何绕过 CF8 编码不可打印字符中的 SerializeJSON?

    SerializeJSON 创建具有不可打印字符 即 ASCII 21 的 JSON 这是无效的 JSON 我该如何解决这个问题 删除不可打印字符的正则表达式会起作用吗 什么正则表达式会删除不可打印的字符 嗯 这个简单的解决方案是为 cff
  • 为什么某些字符无法从 CFQUERY 正确注入到 SQL Server?

    我有一个在 Lucee 上运行的 Coldfusion 应用程序 它连接到 SQL Server 数据库 当我直接在 SQL Server 管理器中运行以下查询时 UPDATE article SET content 20m WHERE i
  • 构建协同过滤/推荐系统

    我正在设计一个网站 该网站的概念是根据用户的口味向他们推荐各种商品 即他们评价过的项目 添加到收藏夹列表中的项目等 亚马逊 Movielens 和 Netflix 就是这样的例子 现在 我的问题是 我不知道从哪里开始了解这个系统的数学部分
  • 与 Git 持续集成

    我想在 Git 之上提供集成挂钩 以便在集成失败时推送被拒绝 例如 当开发人员推送他的更改时 我想检查该项目是否仍然可以成功编译 目前 我设置了更新后挂钩来进行编译检查 但是 当我想拒绝推送时 我会恢复更改并通知开发人员 git rever
  • Exec 战前目标存档包

    我想在打包战争之前运行 maven replacer plugin 我找到了 准备包 阶段 但它在战争组装和复制所有资源之前触发 但我需要在复制所有资源时和创建存档之前进行更改 这在maven中可能吗 顺便说一句 我使用 maven 2 2
  • Jenkins 上的 XCode 项目陷入“codesign”

    我使用 Jenkins 与 XCode 插件进行持续集成 有一个 Jenkins 坚持的项目 usr bin codesign force sign 接下来是旋转器 永远旋转 我以前从未见过这个 以前有人见过这个吗 是配置文件问题还是证书问
  • Github Action 触发另一个存储库更新(push、pull_request)

    我在为我和一些朋友设置适当的构建链时遇到一些麻烦 因此 我分叉了两个存储库 官方 ghidra 和 ghidra ci ghidra ci 是一个构建您的 ghidra 分支的存储库 当您挑选一些 pr 时 您可以添加一些尚未添加到官方 g
  • MsDeploy 虚拟目录在部署时转换为虚拟应用程序

    为了使我的 CMS 正常工作 需要将其部署到 www 根目录下的虚拟目录 以便它可以访问 通过反射 要管理的网站 注意 CMS N2CMS 当使用 Visual Studio 发布到网络 时 一切都很好 但是 当我通过 msbuild 命令
  • TeamCity 将功能分支推送到主分支

    有没有办法将成功构建的功能分支推送到另一个分支 我想要这样的东西 Git 存储库 Gitorious GitHub 等 分支机构 master 当前项目的代码 质量保证 代码等待 QA 的分支 功能分支 许多远程分支 开发人员可以在其中开发
  • 哪个持续集成服务器能够对作业进行排队?

    使用案例 CI 服务器轮询一些 VSC 存储库并为每个修订版运行测试套件 如果提交了两个或多个修订 即使在相对较小的时间间隔内 我也希望 CI 服务器将每个修订放入队列中 为每个修订运行测试 存储结果 并且不再为这些提交运行测试 而且我不希
  • 为什么目录存在测试为真但 cfdirectory 失败?

    我有一个访问内存文件的页面 我们有 10 20k 个文件存储在数百个目录 最多 2000 个 中 所有目录和文件都是以编程方式创建的 没有设置或更改权限 所有文件都使用默认的 CF 帐户 我们没有遇到任何问题 每隔一段时间 我们就会收到一个
  • Jenkins:从神器部署战争文件

    我们正在使用Jenkins建立 maven 并部署工件 JAR 和 WAR s 到内部工件服务器 快照和版本 对于部署 目前 我们有 Jenkins 作业来打包 war 文件 来自发布 scm 标签 并部署到不同的环境 服务器 我们想要跳过
  • 如何根据特定条件触发电子邮件以在 Jenkins 中成功构建

    每当某个条件在构建后步骤的执行 shell 中成立时成功的构建 我想触发电子邮件发送 问题是 即使条件不成立 构建也会被视为success 我正在尝试实现的内容 if condition true then
  • 将带有 webapp 的 WAR 部署到 Maven 中央存储库是否有意义?

    这样做有意义吗 如果是 我在哪里可以找到使用简单的 Web Hello World 执行此操作的示例 当人们从 Maven 执行 Web 应用程序时 他们会使用 Jetty 来运行它吗 我想 tomcat 太重了 任何帮助将不胜感激 谢谢

随机推荐

  • Laravel 5.4 将json保存到数据库

    帮我将 json 保存到数据库 表字段类型 文本 我有带有强制转换数组的模型 class Salesteam extends Model protected casts team members gt array 我想要像这样 index
  • Jackson Kotlin - 反序列化 JsonNode

    Problem 我有字符串形式的 JSON 内容 我首先想用 Jackson 以编程方式遍历它 然后 当我有感兴趣的节点时 我想反序列化它 我尝试过的 我已使用 mapper readValue 成功反序列化字符串 但现在我想在 jsonN
  • 从继承类实现抽象方法

    我正在尝试做一些我以前从未真正做过的事情 我基本上有3节课 A 类是一个具有纯虚方法的抽象类 B 类是一个独立的类 其中包含与 A 类中的虚方法同名的方法 我试图将 C 类中的所有内容结合在一起 我想在C中继承类B和A 多重继承 并使用类B
  • 如何将 sqldatareader 转换为 dto 列表?

    我刚刚开始将所有 ado net 代码从 asp net 页面移动到存储库 并为每个表创建 dto 手动 但现在我不知道将 sqldatareader 转换为我的列表的有效方法是什么dto 对象 例如 我的 dto 是 Customer 我
  • MvxTabsFragment 无法为绑定命令创建目标绑定

    我正在尝试创建一个MvxTabsFragmentActivity并将片段上的按钮绑定到命令 我遇到的问题是以下错误 MvxBind Warning 7 94 Failed to create target binding for bindi
  • 如何知道两个 NSDate 是否在同一天

    你知道如何知道两个NSDate是同一天 我想考虑到区域设置 使用a可能很容易timeIntervalSinceDate 但星期一 23H58 和星期二 00H01 不在同一天 处理NSDate和计算区域设置不是很容易 NSCalendar
  • 当调用dll函数时,参数对象的成员变量的内存地址发生变化

    类某类 一些成员MemberClass one of the mem 我有一个函数foo SomeClass object 在 dll 中 它是从 exe 调用的 Problem 地址one of the mem 在调度 dll 调用期间发
  • Flexbox 调整大小和可滚动溢出[重复]

    这个问题在这里已经有答案了 我有正在调整大小的内容 并且我想要一个固定标题 该标题不会增大 缩小 并且不属于可滚动内容的一部分 如果空间不足 下面的内容将变得可滚动 内容外包装 flexGrowWrapper has a flex grow
  • Flash - HTTP 请求在本地主机上不起作用

    首先 我试图修复一些我一开始就没有构建的东西 项目负责人向我保证 当他离开时 它工作得很好 尽管自从他离开后我从未接触过的版本似乎已经同样的问题 一般来说 我对编程也有点陌生 所以如果我在第一篇文章中遗漏了重要信息 请告诉我 我会尝试添加更
  • jquery comet 长轮询和流媒体教程? [复制]

    这个问题在这里已经有答案了 可能的重复 彗星和 jQuery https stackoverflow com questions 136012 comet and jquery 我厌倦了找不到关于 jquery 长轮询 流彗星技术的好的教程
  • “EXC_BAD_ACCESS”与“分段错误”。两者实际上相同吗?

    在我的前几个虚拟应用程序 用于学习时练习 中 我遇到了很多EXC BAD ACCESS 这以某种方式告诉我错误访问是 您正在触摸 访问一个不应该的对象 因为它尚未分配或释放 或者只是您无权访问它 查看此示例代码 该代码存在访问错误问题 因为
  • 为什么 Google Guice 依赖注入框架有两个单例实例

    我的应用程序中有 2 个 Singleton 实例 都是由 Google Guice 创建的 这怎么可能 绑定完成如下 bind Foo class to FooImpl class in Scopes SINGLETON 这里的问题是绑定
  • 根据单元格值返回图像(100 张图像和可变单元格)

    我正在尝试为我制作一个 TFT 云顶之弈 表 并想让它看起来更好 为此 我想添加游戏中冠军的图像 当我输入名称时 图像应该出现在下面 我找到了一种将所有图像插入 Excel 工作表 100 的方法 并且还成功制作了一个动态图像 插入 IND
  • Android主线程的IO操作

    我的问题有两个 是否建议在 Android 的主线程上进行 IO 操作 或者它是否有可能导致我的应用程序崩溃 如果在主线程上执行 IO 操作不理想 我可以使用哪些其他框架 以便当我的应用程序加载时它可以执行一些基本的 IO 文件读取并将值存
  • System.Reactive:基于时间戳字段的基于时间的缓冲区

    我在 C 项目中使用 Reactive 库根据配置的策略对数据进行分组 所有这些数据都实现了以下接口 public interface IPoint object Value get DateTimeOffset Timestamp get
  • 如何使用timeval结构计算毫秒?

    我想从 timeval 类型的变量中检索以毫秒为单位的值 以下是我的尝试 timeval time long int millis time gt tv sec 1000 time gt tv usec 1000 printf Second
  • 如何在 Eclipse 中引用不同的 Java 项目

    我有项目1和项目2 Project1 依赖于 Project2 我有点厌倦了 每次在 Project2 中进行一些代码更改时 我都必须导出 Project2 JAR 文件 并将其复制到 Project1 的 lib 文件夹中 有没有办法自动
  • 如何在 Jenkins 中设置发件人地址?

    我正在将邮件从 Jenkins 发送到内部匿名 SMTP 中继 然后 该中继通过端口 587 上的 TLS 安全地发送邮件进行在线交换 传输工作正常 问题是 Microsoft 要求发件人地址与身份验证凭据登录名匹配 该登录名与帐户电子邮件
  • 将多个函数应用于一个向量

    我正在寻找一种将多个函数应用于一个向量的选项 我认为这对于逆应用函数来说是一种仁慈 其中一个函数应用于许多向量 或列 有没有办法指定两个或多个函数 例如 min 和 max 并将其应用于向量 与 CathG的评论类似 但没有get v lt
  • 使用 Maven 进行 Coldfusion 项目

    我必须处理相当丑陋且大量的 ColdFusion 代码 到目前为止 这些代码都是通过在生产服务器上直接修改来维护的 不要问 我设法清除它的重复和备份并将其放入 Subversion 现在我需要选择一个 make 系统以便能够将其放入持续构建