Невозможно добавить зависимость качания Scala через Gradle в Scala IDE

Я новичок в изучении Scala. Я на Windows 8.1, использую Scala IDE 4.0.0 и Gradle с плагинами scala и eclipse для создания проекта, в котором я хочу использовать пакеты scala.swing и javax.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, как показано на рисунке ниже

объект качели не входит в пакет scala

<<.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

2 ответа

Решение

Я была такая же проблема. Я думаю, что это была несовместимость между версией 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

Все зависимости работают!

Похоже, что Gradle не может решить org.scala-lang:scala-swing:2.10.4 зависимость при создании файлов Eclipse. Я использую IntelliJ, и он делает то же самое - все выглядит нормально, но зависимости отсутствуют - очень расстраивает.

Вы можете проверить, запустив

$ gradle dependencies

И проверяя это scala-swing решается правильно. Я проверил Maven central, и вы определенно правильно указали зависимость. Если это не показывает ошибок, попробуйте очистить файлы проекта и восстановить.

Другие вопросы по тегам