【问题标题】:Why can IntelliJ IDEA resolve the classes but Groovy / Griffon cannot?为什么 IntelliJ IDEA 可以解析类而 Groovy / Griffon 不能?
【发布时间】:2011-12-07 18:43:18
【问题描述】:

我正在使用 IntelliJ 开发 Griffon 应用程序,并且我正在尝试使用 dcm4che 项目库。我已经设法让 IntelliJ 的代码编辑器停止抱怨缺少类,但是当我运行 Griffon 应用程序时,编译器着火了,抱怨它是 unable to resolve class DicomInputStream,等等。

我没有做任何花哨的事情。我所做的只是尝试包含一些简单的 jar 文件,但无论出于何种原因,事情都无法正常工作。

我承认,我在处理类路径问题方面并不是特别精通,而且我使用 IntelliJ 的时间也只有一小段时间,而使用 Griffon / Groovy 的时间更短,但我完全被难住了。

这是失败的导入语句集:

import org.dcm4che2.io.DicomInputStream
import org.dcm4che2.data.DicomObject
import org.dcm4che2.data.DicomElement

这是我在尝试运行或调试应用程序时在 IntelliJ 控制台中收到的一组错误消息:

Base Directory: C:\Users\[REDACTED]\MyApp\MyAppClient
Resolving dependencies...
Dependencies resolved in 698ms.
Running script C:\Program Files (x86)\Griffon\Griffon-0.9.4\scripts\RunApp.groovy
Environment set to development
 [griffonc] Compiling 32 source files to C:\Users\[REDACTED]\.griffon\0.9.4\projects\MyApp\classes
 [griffonc] org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
 [griffonc] C:\Users\[REDACTED]\MyApp\MyAppClient\griffon-app\controllers\myappclient\SelectRootController.groovy: 9: unable to resolve class org.dcm4che2.data.DicomElement
 [griffonc]  @ line 9, column 1.
 [griffonc]    import org.dcm4che2.data.DicomElement
 [griffonc]    ^
 [griffonc] 
 [griffonc] C:\Users\[REDACTED]\MyApp\MyAppClient\griffon-app\controllers\myappclient\SelectRootController.groovy: 7: unable to resolve class org.dcm4che2.io.DicomInputStream
 [griffonc]  @ line 7, column 1.
 [griffonc]    import org.dcm4che2.io.DicomInputStream
 [griffonc]    ^
 [griffonc] 
 [griffonc] C:\Users\[REDACTED]\MyApp\MyAppClient\griffon-app\controllers\myappclient\SelectRootController.groovy: 8: unable to resolve class org.dcm4che2.data.DicomObject
 [griffonc]  @ line 8, column 1.
 [griffonc]    import org.dcm4che2.data.DicomObject
 [griffonc]    ^
 [griffonc] 
 [griffonc] 3 errors
Compilation error: Compilation Failed

要安装 dcm4che 库,我执行了以下操作:

  1. 下载library binaries(-bin zip)并解压到MyApp\MyAppClient\lib\dcm4che-2.0.25-bin
  2. 在“项目结构”对话框的“模块”->“MyAppClient”下的“依赖项”选项卡下,单击“添加”并选择文件夹:MyAppClient\lib\dcm4che-2.0.25-bin\dcm4che-2.0.25\lib

此时,代码编辑器不再抱怨无法找到和解析类,但是当我运行或调试应用程序时,我得到了编译错误。在不导入这些类(以及使用它们的代码)的情况下,一切都正常

我能做些什么来解决这个问题?还有哪些其他信息有助于弄清楚发生了什么?

【问题讨论】:

  • 您到底是如何告诉 IDEA 您的依赖项在哪里的? AFAIK 的正统方法是将它们放入 lib 目录,或者使用特殊的 DSL 通过 Maven id 指向它们。
  • @PeterGromov,我添加了关于如何添加库的描述。基于有和没有这些导入的控制台输出,Java 调用根本没有改变(例如,将目录添加到类路径)
  • 请尝试将jar直接放在MyAppClient\lib下。
  • @PeterGromov,将所有 jar 文件放在 lib 目录中是可行的,但是如果我将它们放在其中的任何目录中,例如 lib/dcm4che/,IDE 可以找到它们,没问题,但是格里芬不能。有什么办法可以解决这个问题吗?我真的很不想将我的 所有 jar 文件放在一个没有组织的大目录中,尤其是当多个项目需要相同的东西时。
  • 这就是 Griffon 的工作方式,抱歉。您可以尝试通过 DSL (griffon.codehaus.org/guide/0.9.4/guide/…) 管理依赖项,但请注意 IDEA 目前不支持 (youtrack.jetbrains.net/issue/IDEABKL-6134),您必须手动管理模块依赖项。

标签: import intellij-idea classpath griffon dcm4che


【解决方案1】:

正如 Peter 建议的那样,您可以使用依赖 DSL 将库配置为依赖项(如果它可从 maven 或 ivy 存储库中获得),或者将其放在 MyApp/lib 中(无需额外的子目录)。这些是 Griffon 制定的约定。

【讨论】:

  • 如果 Griffon 能够更轻松地处理在MyApp/lib 目录中拥有更多组织,那将是很棒
  • 这就是为什么我们首先需要依赖 DSL。但是,在 Griffon 进入 1.0 之后,我们可能会支持 $app/lib 中的嵌套依赖项。
猜你喜欢
  • 2020-07-16
  • 2017-01-16
  • 1970-01-01
  • 2013-11-28
  • 1970-01-01
  • 2017-09-20
  • 1970-01-01
  • 2015-06-26
  • 1970-01-01
相关资源
最近更新 更多