1

Scala初心者です。私は Windows 8.1 を使用しており、Scala IDE 4.0.0Gradlescalaおよびeclipseプラグインを使用してプロジェクトを作成しています。このプロジェクトでは、 scala.swingおよびjavax.mediaパッケージを使用したいと考えています。両方のライブラリを依存関係として build.gradle に追加しましたが、javax.media のみが機能します。

私が行った手順は次のとおりです。

  1. 次のようにフォルダとファイルを作成します

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

    以下に示すように、 は Gradle ビルド スクリプトで、 は Scala スクリプトですbuild.gradleFoo.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 scalaReferenced Libraries下の図に示すように、左側のパネルのリストには のみjmf-2.1.1e.jarjavax.media表示されます。

オブジェクト 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.jarGradle によってインポートされなかった理由とその修正方法を提案してください。


これは、実行後のログ メッセージです$ 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
4

2 に答える 2

3

同じ問題がありました。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

すべての依存関係が機能します。

于 2015-03-19T13:43:58.160 に答える
0

これは、Gradle がorg.scala-lang:scala-swing:2.10.4Eclipse ファイルを生成したときに依存関係を解決できなかったようです。私はIntelliJを使用していますが、同じことを行います-すべてが正常に機能しているように見えますが、依存関係がありません-非常にイライラします.

実行して確認できます

$ gradle dependencies

そして、それscala-swingが正しく解決されていることを確認しています。私はMaven centralをチェックしましたが、依存関係が正しくリストされていることは間違いありません。これでエラーが表示されない場合は、プロジェクト ファイルを消去して再生成してみてください。

于 2015-01-01T13:33:15.543 に答える