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 Help
→ Show 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 банки для каждой зависимости, если вы включили это в своих настройках, которые могут выглядеть так, как будто они снова загружают зависимости.
Заметьте, я дико угадываю здесь, потому что вы не включили какой-либо вывод из программ, которые вы используете, поэтому трудно сказать, какова настоящая проблема.