28

我使用 Scala IDE 2.0.1 和 SBT 0.11.2 从 Akka 2.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"

如您所见,没有什么了不起的。

现在我如何告诉 Eclipse 将工件与 akka-actor 库的源分类器一起使用?

在 SBT 中,我可以使用 update-classifiers 将源代码和 Javadocs 下载到 Ivy 存储库,但即使我在从 sbteclipse 插件运行 eclipse 命令之前执行此操作,Eclipse 仍然不知道源代码。当然,我可以手动执行此操作,但这不适用于更多库。

我还尝试将 IvyDE 插件与 Delivery-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 但没有源,它不会检查其他解析器的源/javadoc。本地 Play 安装中的存储库没有源代码或 javadoc。

当 IvyDE 在 Eclipse 中解析时,这为我的依赖项中的大多数 jar 提供了源附件。

于 2012-08-27T16:12:26.307 回答
2

我发现给 IvyDE 和 sbt 不同的 ivy 缓存目录更容易。是的,它需要更多空间,但默认情况下 sbt 不下载源代码。一旦 sbt 加载了没有源的缓存,IvyDE 就不会添加它们。您可以告诉 sbt 获取它们,但对我来说,使用更多磁盘空间并使用两个不同的缓存更容易。

为此,我将 sbt 保留为默认值,并在 Preferences > Ivy > Settings 选项卡 > Ivy 设置文件中设置 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>

这指向我的本地 nexus 服务器,因此您需要针对您的环境对其进行修改。

于 2013-03-05T16:27:23.350 回答
1

好吧,我已经放弃了,回到了 NetBeans 7.1.2 + Scala 插件 + Maven。这种组合更好地集成并且开箱即用,无需修补。

于 2012-07-27T07:28:25.793 回答