【问题标题】:Cannot add scala swing dependency via Gradle in Scala IDE无法通过 Scala IDE 中的 Gradle 添加 scala swing 依赖项
【发布时间】:2015-02-28 03:19:39
【问题描述】:

我是学习 Scala 的初学者。我在 Windows 8.1 上,使用 Scala IDE 4.0.0Gradle 以及 scalaeclipse 插件来创建一个项目,我想在其中使用 scala.swingjavax.media 包。 我将这两个库作为依赖项添加到 build.gradle 中,只有 javax.media 有效。

我做的步骤是:

  1. 如下创建文件夹和文件

    foo
     |-src
        |-main
           |-scala
               |-Foo.scala
     |-build.gradle
    

    其中build.gradle 是Gradle 构建脚本,Foo.scala 是Scala 脚本,如下所示

    <<build.gradle>>

    apply plugin: 'scala'
    apply plugin: 'eclipse'
    
    repositories {
      mavenCentral()
    }
    
    dependencies {
      compile 'org.scala-lang:scala-swing:2.10.4'
      compile 'javax.media:jmf:2.1.1e'
    }
    

    <<Foo.scala>>

    import javax.media.Player //no error
    import scala.swing._ //error: object swing is not a member of package scala
    
    class Foo {
    }
    
  2. 使用命令行,导航到foo并运行gradle eclipse

  3. 在 Scala IDE 中,执行 import -> General -> Existing Projects into Workspace -> Browse -> Foo

然后,我在 Foo.scala 第 2 行收到一个错误,显示为 object swing is not a member of package scala。而左侧面板上的Referenced Libraries列表只显示jmf-2.1.1e.jar对应javax.media,如下图所示

<<.classpath>>

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="output" path="bin"/>
<classpathentry kind="src" path="src/main/scala"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER" exported="true"/>
<classpathentry kind="con" path="org.scala-ide.sdt.launching.SCALA_CONTAINER" exported="true"/>
<classpathentry kind="lib" path="C:/Users/mm/.gradle/caches/modules-2/files-2.1/javax.media/jmf/2.1.1e/fe9287a362578bfb8b7b9dba42af0ec80a297abb/jmf-2.1.1e.jar" exported="true"/>
</classpath>

我曾尝试配置 Eclipse 的构建路径并手动添加 scala-swing.jar,这可以正常工作,但是每次运行 Gradle 构建脚本时我都必须这样做。请提出为什么 scala-swing-something.jar 没有被 Gradle 导入,以及如何修复它。


这是运行$ gradle dependencies后的日志消息:

$ gradle dependencies
:dependencies

------------------------------------------------------------
Root project
------------------------------------------------------------

archives - Configuration for archive artifacts.
No dependencies

compile - Compile classpath for source set 'main'.
+--- org.scala-lang:scala-swing:2.10.4
|    \--- org.scala-lang:scala-library:2.10.4
\--- javax.media:jmf:2.1.1e

default - Configuration for default artifacts.
+--- org.scala-lang:scala-swing:2.10.4
|    \--- org.scala-lang:scala-library:2.10.4
\--- javax.media:jmf:2.1.1e

runtime - Runtime classpath for source set 'main'.
+--- org.scala-lang:scala-swing:2.10.4
|    \--- org.scala-lang:scala-library:2.10.4
\--- javax.media:jmf:2.1.1e

testCompile - Compile classpath for source set 'test'.
+--- org.scala-lang:scala-swing:2.10.4
|    \--- org.scala-lang:scala-library:2.10.4
\--- javax.media:jmf:2.1.1e

testRuntime - Runtime classpath for source set 'test'.
+--- org.scala-lang:scala-swing:2.10.4
|    \--- org.scala-lang:scala-library:2.10.4
\--- javax.media:jmf:2.1.1e

zinc - The Zinc incremental compiler to be used for this Scala project.
No dependencies

BUILD SUCCESSFUL

Total time: 11.159 secs

【问题讨论】:

    标签: scala gradle scala-ide scala-swing


    【解决方案1】:

    我遇到了同样的问题。我认为这是 Scala 版本和 Scala Swing 版本之间的不兼容。我有这些依赖项:

    dependencies {
        compile 'org.scala-lang:scala-library:2.11.5'
        compile 'org.scala-lang:scala-swing:2.10.4'
    }
    

    要解决这个问题,请添加 scala-library-all 依赖项:

    dependencies {
        compile 'org.scala-lang:scala-library-all:2.11.5'
    }
    

    您可以保留它,但它会添加您可能不需要的各种依赖项。如果你不想这样,调用:

    gradle dependencies
    

    它会告诉你 Gradle 找到了哪些依赖项。我说,除其他外:

    compile - Compile classpath for source set 'main'.
    +--- org.scala-lang:scala-library-all:2.11.5
    |    +--- org.scala-lang:scala-library:2.11.5
    |    +--- org.scala-lang.modules:scala-swing_2.11:1.0.1
    |    |    \--- org.scala-lang:scala-library:2.11.0 -> 2.11.5
    

    注意 Scala Swing 依赖项,它的名称和版本与我指定的不同。将其复制并粘贴到您的 build.gradle 依赖项中:

    dependencies {
        compile 'org.scala-lang:scala-library:2.11.5'
        compile 'org.scala-lang.modules:scala-swing_2.11:1.0.1'
    }
    

    然后瞧:

    gradle cleanEclipse eclipse
    

    所有依赖项都有效!

    【讨论】:

      【解决方案2】:

      这看起来 Gradle 在生成 Eclipse 文件时无法解析 org.scala-lang:scala-swing:2.10.4 依赖项。我使用 IntelliJ,它做同样的事情 - 一切看起来都正常,但是缺少依赖项 - 非常令人沮丧。

      你可以通过运行检查

      $ gradle dependencies
      

      并检查scala-swing 是否被正确解析。我检查了 Maven 中心,您肯定正确列出了依赖项。如果这显示没有错误,请尝试清理您的项目文件并重新生成。

      【讨论】:

      • 谢谢,我已经按照你的建议尝试了,但是运行$gradle dependencies后我不明白日志消息我更新了问题下的消息。
      • 您的依赖项看起来不错 - 如果有任何无法解决,它会在该依赖项旁边显示“FAILED”。你试过做一个 gradle cleanEclipse eclipse 吗?
      • 是的,但仍然无法正常工作。我试过$ gradle cleanEclipse eclipse->刷新项目,也试过Eclipse的Project -&gt; Clean功能。
      • 您是否尝试过关闭 Eclipse,运行 gradle 命令然后重新打开?我有时会在 IntelliJ 上看到同样的问题,它最终与 IDE 在关机前保存一些文件有关
      • 我试过了,但错误仍然存​​在(T_T)。我还运行该命令并在 Eclipse 关闭的情况下查看了 .classpath,但没有出现 scala-swing 的条目。
      猜你喜欢
      • 2018-01-13
      • 2015-10-27
      • 2011-11-14
      • 2013-05-28
      • 2021-03-09
      • 2019-10-17
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      相关资源
      最近更新 更多