Ответ 1
Ну, я отказался от этого и вернулся к плагину NetBeans 7.1.2 + Scala + Maven. Эта комбинация намного лучше интегрирована и работает без коробки.
Я использую 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 я могу использовать классификаторы обновлений для загрузки источников и Javadocs в репозиторий Ivy, но даже если я это сделаю перед запуском команды eclipse из плагина sbteclipse, Eclipse все еще не знает источники. Конечно, я мог бы сделать это вручную, но это не масштабируется для большего количества библиотек.
Я также попытался использовать плагин IvyDE с командой доставки-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 не подбирает его.
Ну, я отказался от этого и вернулся к плагину NetBeans 7.1.2 + Scala + Maven. Эта комбинация намного лучше интегрирована и работает без коробки.
Вы можете поместить
EclipseKeys.withSource := true
на ваш build.sbt
, который позволяет sbteclipse загружать все источники и делает их доступными в Eclipse. Обратите внимание, что это загрузит все источники из всех настроенных зависимостей. Я понятия не имею, как сказать sbt для загрузки только источников для отдельных зависимостей.
Наконец, я нашел решение, позволяющее sbt загружать источники и сообщать Eclipse, где их искать.
Добавить в build.sbt:
EclipseKeys.withSource := true
Затем запустите:
rm -rf ~/.ivy2/cache/
sbt update-classifiers
sbt eclipse
Странная часть состоит в том, что если вы уже загрузили зависимости в плющом, у вас есть их в кеше, и вы не сможете загрузить источники для них.
Мне удалось завершить эту работу.
Мне пришлось использовать внешний файл настроек плюща:
<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"))
для моей сборки .scala.
Порядок распознавателей в цепочке оказался важным, потому что, если Айви найдет банку, но нет источников, он не будет проверять другие резольверы для источников /javadoc. В репозитории локальной установки Play нет источников или javadoc.
Это дает мне исходные вложения для большинства банок в моих зависимостях, когда IvyDE разрешается в Eclipse.
Я нахожу, что проще дать IvyDE и sbt разные каталоги кэша плюща. Да, это занимает больше места, но sbt по умолчанию не загружает источники. И как только sbt загрузил кеш без источников, IvyDE не добавит их. Вы можете сказать sbt, чтобы получить их, но для меня проще просто использовать больше дискового пространства и использовать два разных кеша.
Я делаю это, оставляя sbt по умолчанию и устанавливая IvyDE для использования этого файла в настройках > Ivy > вкладка "Настройки" > "Файл настроек Ivy":
<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, поэтому вам нужно будет изменить его для своей среды.