Невозможно добавить зависимость Swing 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, как показано на рисунке ниже.

object swing не является членом пакета 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

person asinkxcoswt    schedule 01.01.2015    source источник


Ответы (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

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

person Daniel A.A. Pelsmaeker    schedule 19.03.2015

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

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

$ gradle dependencies

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

person tddmonkey    schedule 01.01.2015
comment
Спасибо, я попробовал, как вы предлагаете, но я не понимаю сообщение журнала после запуска $gradle dependencies. Я обновил сообщение под вопросом. - person asinkxcoswt; 01.01.2015
comment
Ваши зависимости выглядят нормально - если какие-либо из них не могут быть разрешены, рядом с этой зависимостью будет написано FAILED. Вы пытались сделать затмение gradle cleanEclipse? - person tddmonkey; 01.01.2015
comment
Да, но все еще не работает. Я попробовал $ gradle cleanEclipse eclipse -> обновить проект, а также попробовал функциональность Project -> Clean Eclipse. - person asinkxcoswt; 01.01.2015
comment
Вы пытались закрыть Eclipse, запустить команды gradle, а затем снова открыть? Я иногда видел ту же проблему с IntelliJ, и в конечном итоге это связано с тем, что IDE сохраняет некоторые из своих файлов перед выключением. - person tddmonkey; 01.01.2015
comment
Я попробовал это, и ошибка все еще там (T_T). Я также запускаю команду и смотрю на .classpath с закрытием Eclipse, но запись в scala-swing не появляется. - person asinkxcoswt; 01.01.2015