28

私はScalaIDE2.0.1とSBT0.11.2を使用してAkka2.0.1から始めています。私のbuild.sbtは次のようになります:

name := "akka"

version := "0.1"

scalaVersion := "2.9.2"

resolvers += "Typesafe Repository" at "http://repo.typesafe.com/typesafe/releases/"

libraryDependencies += "com.typesafe.akka" % "akka-actor" % "2.0.1"

ご覧のとおり、見事なものは何もありません。

では、akka-actorライブラリのソース分類子でアーティファクトを使用するようにEclipseに指示するにはどうすればよいですか?

SBTでは、update-classifiersを使用してソースとJavadocをIvyリポジトリにダウンロードできますが、sbteclipseプラグインからeclipseコマンドを実行する前にこれを実行しても、Eclipseはソースを認識しません。もちろん、これは手動で行うこともできますが、これはより多くのライブラリに対して適切に拡張できません。

また、deliver-localコマンドでIvyDEプラグインを使用しようとしました。これは依存関係管理を統合しますが、ソースには役立たないようです。

手がかりはありますか?

編集:これはdeliver-localから生成されたivy.xmlです:

<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra">
<info organisation="default" module="akka_2.9.2" revision="0.1" status="release" publication="20120506225613">
    <description>
    akka
    </description>
</info>
<configurations>
    <conf name="compile" visibility="public" description=""/>
    <conf name="runtime" visibility="public" description="" extends="compile"/>
    <conf name="test" visibility="public" description="" extends="runtime"/>
    <conf name="provided" visibility="public" description=""/>
    <conf name="optional" visibility="public" description=""/>
    <conf name="sources" visibility="public" description=""/>
    <conf name="docs" visibility="public" description=""/>
    <conf name="pom" visibility="public" description=""/>
</configurations>
<publications>
    <artifact name="akka_2.9.2" type="pom" ext="pom" conf="pom"/>
    <artifact name="akka_2.9.2" type="jar" ext="jar" conf="compile"/>
    <artifact name="akka_2.9.2" type="src" ext="jar" conf="sources" e:classifier="sources"/>
    <artifact name="akka_2.9.2" type="doc" ext="jar" conf="docs" e:classifier="javadoc"/>
</publications>
<dependencies>
    <dependency org="org.scala-lang" name="scala-library" rev="2.9.2" conf="compile->default(compile)"/>
    <dependency org="com.typesafe.akka" name="akka-actor" rev="2.0.1" conf="compile->default(compile)"/>
    <exclude org="org.scala-lang" module="scala-library" artifact="*" type="jar" ext="*" matcher="exact"/>
    <exclude org="org.scala-lang" module="scala-compiler" artifact="*" type="jar" ext="*" matcher="exact"/>
    <override org="org.scala-lang" module="scala-library" matcher="exact" rev="2.9.2"/>
    <override org="org.scala-lang" module="scala-compiler" matcher="exact" rev="2.9.2"/>
</dependencies>
</ivy-module>

私はアイビーに不慣れなので、これは私に多くを教えてくれません。ソースとjavadocsについて言及していると思いますが、どういうわけかIvyDEはそれを取得しません。

4

5 に答える 5

35

あなたが置くことができます

EclipseKeys.withSource := true

これによりbuild.sbt、sbteclipseはすべてのソースをダウンロードし、Eclipse内でアクセスできるようになります。これにより、構成されているすべての依存関係からすべてのソースがダウンロードされることに注意してください。単一の依存関係のソースのみをダウンロードするようにsbtに指示する方法がわかりません。

于 2012-07-27T07:59:08.423 に答える
9

最後に、sbtにソースをダウンロードさせ、Eclipseにそれらの場所を指示するソリューションを見つけました。

build.sbtを追加します:

EclipseKeys.withSource := true

次に、以下を実行します。

rm -rf  ~/.ivy2/cache/

sbt update-classifiers

sbt eclipse

奇妙な部分は、すでにivyに依存関係をダウンロードしている場合、それらをキャッシュに入れて、それらのソースをダウンロードできないことです。

于 2014-07-04T14:23:37.850 に答える
3

私はこれをようやく機能させることができました。

外部のツタの設定ファイルを使用する必要がありました:

<ivysettings>
  <properties environment="env" />
  <settings defaultResolver="play" defaultResolveMode="dynamic" />
  <caches defaultCacheDir="${env.PLAY_HOME}/repository/cache" />
  <resolvers>
    <chain name="play">
      <ibiblio name="typesafe-releases" m2compatible="true" root="http://repo.typesafe.com/typesafe/releases" />
      <ibiblio name="sonatype-oss-releases" m2compatible="true" root="http://oss.sonatype.org/content/repositories/releases" />
      <filesystem name="local-filesystem">
        <ivy pattern="${env.PLAY_HOME}/repository/local/[organization]/[module]/[revision]/ivys/ivy.xml" />
        <artifact pattern="${env.PLAY_HOME}/repository/local/[organization]/[module]/[revision]/[type]s/[module](-[classifier]).[ext]" />
      </filesystem>
      <ibiblio name="central-uk" m2compatible="true" root="http://uk.maven.org/maven2" />
      <ibiblio name="typesafe-snapshots" m2compatible="true" root="http://repo.typesafe.com/typesafe/snapshots" />
      <ibiblio name="sonatype-oss-snapshots" m2compatible="true" root="http://oss.sonatype.org/content/repositories/snapshots" />
    </chain>
  </resolvers>
</ivysettings>

そして追加:

externalIvySettings(baseDirectory(_ / "ivysettings.xml"))

私のBuild.scalaに。

Ivyがjarを検出したがソースが見つからなかった場合、他のリゾルバのsources / javadocをチェックしないため、チェーン内のリゾルバの順序が重要であることがわかりました。ローカルPlayインストールのリポジトリには、ソースまたはjavadocがありません。

これにより、IvyDEがEclipseで解決されるときに、依存関係にあるほとんどのjarのソース添付ファイルが取得されます。

于 2012-08-27T16:12:26.307 に答える
2

IvyDEとsbtに異なるivyキャッシュディレクトリを指定する方が簡単だと思います。はい、より多くのスペースが必要ですが、デフォルトではsbtはソースをダウンロードしません。そして、sbtがソースなしでキャッシュをロードすると、IvyDEはそれらを追加しません。sbtにそれらをフェッチするように指示できますが、私にとっては、より多くのディスクスペースを使用し、2つの異なるキャッシュを使用する方が簡単です。

これを行うには、sbtをデフォルトのままにし、[設定]>[アイビー]>[設定]タブ>[アイビー設定ファイル]でこのファイルを使用するようにIvyDEを設定します。

<ivysettings>

    <settings defaultResolver="nexus" />

    <property
        name="nexus-public"
        value="http://localhost:8081/nexus/content/groups/public" />

    <resolvers>

        <ibiblio
            name="nexus"
            m2compatible="true"
            root="${nexus-public}" />
    </resolvers>

    <caches defaultCacheDir="${user.home}/.ivy2eclipse" />

</ivysettings>

これは私のローカルネクサスサーバーを指しているので、環境に合わせて変更する必要があります。

于 2013-03-05T16:27:23.350 に答える
1

さて、私はこれをあきらめて、NetBeans 7.1.2+Scalaプラグイン+Mavenに戻りました。この組み合わせは、はるかにうまく統合されており、いじくり回すことなく、箱から出してすぐに機能します。

于 2012-07-27T07:28:25.793 に答える