Intellij/activator/sbt загружают зависимости, ранее загруженные другим

Я не эксперт в sbt, поэтому, вероятно, мой вопрос немного нуб, но я заметил, что когда я создаю проект и загружаю его зависимости с помощью sbt, если я открою проект с помощью intellij, все зависимости будут снова перезагружаются, то же самое происходит и в обратном ордене intellij- > sbt, а также активаторе.

мои (плохие) знания о sbt, чем это использует плющ, и зависимости загружаются в папку ~/.ivy2/..., где sbt загружает мои депилы, но кажется, что intellij использует другую папку.

лично я не использую так много активаторов, но я бы хотел настроить sbt и intellij для использования одного и того же пути плюща...

2) Недавно я публикую finagle-postgre для своего локального плюща, используя sbt + publishLocal, я могу проверить свою папку с плющом

 /home/yo/.ivy2/local/com.twitter/finagle-postgres_2.11/0.1.0-SNAPSHOT

но, к сожалению, intellij не может решить эту зависимость, я пытаюсь добавить эту строку в мою сборку

 resolvers += Resolver.file("Local", file( Path.userHome.absolutePath + "/.ivy2/local"))(Resolver.ivyStylePatterns)

но, похоже, не работает

3) путь, где загружаются зависимости, связан с тем, какой файл sbt-launch.jar используется? Как я могу узнать, что sbt-lauch.jar файл использует sbt прямо сейчас...

спасибо, ребята!

Ответы

Ответ 1

Если мы говорим о том, что IntelliJ появляется, чтобы загрузить артефакты после того, как они уже были загружены SBT/Activator, то получается, что, возможно, именно IntelliJ загружает источники - это не перезагрузка двоичных артефактов, а также исходные артефакты, которые их сопровождают.

Это не легко увидеть, когда вы смотрите задачу Refreshing SBT project в всплывающем окне Background Tasks, потому что полный путь загрузки усечен, поэтому вы видите что-то вроде этого:

[info] downloading https://repo1.maven.org/maven2/org/apache/httpcompo...

.. Естественно предположить, что это тот же бинарный артефакт, что вы уже видели загрузку SBT на консоли, но вы можете увидеть полную историю, если вы проверите полный журнал (go HelpShow Log in files и откройте sbt.last.log в браузере файлов).

Вы увидите, что только полученные файлы артефактов заканчиваются на -sources.jar:

$ grep repo1.maven.org /home/roberto/.IntelliJIdea2016.3/system/log/sbt.last.log 
[info] downloading https://repo1.maven.org/maven2/org/apache/httpcomponents/httpclient/4.3.6/httpclient-4.3.6-sources.jar ...
[info] downloading https://repo1.maven.org/maven2/com/googlecode/javaewah/JavaEWAH/0.7.9/JavaEWAH-0.7.9-sources.jar ...
[info] downloading https://repo1.maven.org/maven2/org/pegdown/pegdown/1.2.1/pegdown-1.2.1-sources.jar ...
[info] downloading https://repo1.maven.org/maven2/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3-sources.jar ...

`` `

Если у вас нет флажка Sources, если вы делаете Import project, эти исходные загрузки не будут выполняться.

с использованием IntelliJ 2016.3.5 и Scala плагина v2016.3.9

Ответ 2

Во-первых, активатор - это просто пусковая установка для самого SBT, поэтому не должно быть разницы в поведении.

Во-вторых, IntelliJ также использует файлы в ~/.ivy2 по умолчанию, если вы не сказали об этом иначе (путем установки, например, переменной среды SBT_OPTS, но это зависит от вашей версии IntelliJ).

Разница может возникнуть, если вы используете разные версии scala (например, 2.10.x против 2.11.x), если вы не задали scalaVersion в своем проекте явно. Затем каждый инструмент будет загружать соответствующие библиотеки для соответствующей версии scala, которую он настроил по умолчанию.

Другое дело, что IntelliJ будет загружать исходные и javadoc банки для каждой зависимости, если вы включили это в своих настройках, которые могут выглядеть так, как будто они снова загружают зависимости.

Заметьте, я дико угадываю здесь, потому что вы не включили какой-либо вывод из программ, которые вы используете, поэтому трудно сказать, какова настоящая проблема.