【问题标题】:Factual API and coldfusionFactual API 和冷融合
【发布时间】:2016-03-29 18:05:41
【问题描述】:

我采用了 Factual API 的 java 实现(参考 http://developer.factual.com/)并为 factual 创建了一个 JAR 文件。我通过在 Eclipse 中使用实际的 java 文件打开一个新项目然后导出到一个新的 jar 文件来做到这一点。

我将该 jar 文件放在我的 Coldfusion 安装的 /WEB-INF/lib/ 文件夹中。

重启 Coldfusion 后,我尝试像这样创建一个新的 cfobject

<cfscript>

     // Initialize the Java class. 
     factualClass=CreateObject("java", "src.main.java.com.factual.driver.Factual"); 

</cfscript>

我收到一条错误消息,指出它找不到 Factual 类。

谁能给我一些指导?

【问题讨论】:

  • 不,罐子可以在任何一个位置。就我个人而言,我更喜欢使用 /web-inf/lib 并将 cfusion\lib 仅用于内置 jar,但是只要您之后重新启动,任何一个目录都可以工作。 @user2320726 - 您使用的是哪个版本? CF10+支持通过application.cfc动态加载,stackoverflow.com/questions/32001030/…
  • CF11 ...我在制作 jar 文件时会不会弄错了?我可以通过 7-zip 文件管理器查看 jar 结构,看起来路径还可以。
  • 那个或者你的 createObject 路径是关闭的。如果您查看其中一个类,则基本包是com.factual.driver.*。那是你的 jar 文件和你的 createObject 语句中应该存在的结构。您的 jar 中的顶级文件夹是什么?旁注,虽然您所做的工作也很好,但在 CF11 中使用应用程序级类加载更容易。无需重新启动服务器。请参阅上面的 Application.cfc 链接。
  • 我尝试将路径更改为“com.factual.driver.Factual”但没有成功。当我查看 jar 文件结构时,它模仿了我打开下载的包含所有 java 文件的 zip 文件时看到的路径。我应该重新创建 jar 文件,以便它从“com”级别开始吗?
  • 使用 Maven 构建通常更简单。这是一个预编译的 jar(不确定它是否是正确的版本)。 mvnrepository.com/artifact/com.factual/factual-java-driver/… 。注意顶层文件夹是com.*?应该是这样,然后您的 createObject 调用将使用 com.factual.driver.Factual

标签: java class jar coldfusion factual


【解决方案1】:

(来自cmets的总结)

听起来您可能正在导出源文件,即*.java,而不是已编译的类文件,即*.class。在Jar Export wizard 中,一定要选择“导出生成的类文件和资源”选项。 (要在 expi 之前自动编译项目源,请启用设置:JAR 打包 > 如果不自动构建则构建项目选项)。如果您愿意,还可以在 MVN repository 中找到预编译的 jar。

将该 jar 文件放入我的 Coldfusion 安装的 /WEB-INF/lib/ 文件夹。

CF10+ 还支持通过新的应用程序级别设置THIS.javaSettings 进行动态类加载。

 // Initialize the Java class. 
 factualClass=CreateObject("java", "src.main.java.com.factual.driver.Factual");

作为一个兴趣点,src/main/java/ 实际上并不是库类名的一部分。它是一个标准的目录结构used in Maven projects。导出源时可能包含它,但不包含已编译的类。

您始终可以通过检查 API(即 javadocs)或查看源文件来验证正确的路径和类名。 Package declarations 始终位于源文件的顶部,例如在src/main/java/com/factual/driver/Factual.java 的第 1 行:

     package com.factual.driver; // ie "com.factual.driver"

.. 以及第 39 行的类声明。

     public class Factual {   // ie "Factual"

为您提供与 createObject 一起使用的确切(区分大小写)路径:

     factualClass=CreateObject("java", "com.factual.driver.Factual");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 2011-01-15
    • 1970-01-01
    相关资源
    最近更新 更多