Как получить родительский каталог файла sbt - PullRequest
0 голосов
/ 12 июля 2020

У меня есть следующая строка в моем sbt-файле:

target in Compile in doc := baseDirectory.value / "docs"

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

parentDirectory = parent of baseDirectory
target in Compile in doc := parentDirectory.value / "docs"

Где теперь «docs» находится рядом с baseDirectory, а не в нем.

Есть простой способ сделать это ?

РЕДАКТИРОВАТЬ: Структура проекта

myFolder/project/build.sbt

Если я запускаю «docs» в оболочке sbt, я получаю следующий результат:

myFolder/project/docs/

Вместо этого я хочу :

myFolder/docs/
myFolder/project/build.sbt

Причина, по которой я хочу это сделать, заключается в том, что я могу разместить свои документы на страницах github в том же каталоге. Это кажется самым простым способом, не усложняющим работу.

Ответы [ 2 ]

4 голосов
/ 12 июля 2020

Рассмотрим стандартную нотацию из двух последовательных точек .. для представления родительского каталога, например

Compile / doc / target := baseDirectory.value / ".." / "docs"

В качестве альтернативы file("..") также может работать

Compile / doc / target := file("../docs")

Возможно, вы захотите создать специальная настройка для повторного использования

lazy val parentOfBaseDirectory = settingKey[File]("Parent of base directory")
parentOfBaseDirectory := baseDirectory.value / ".."

Пара примечаний:

Вы можете проводить быстрые разовые эксперименты в оболочке sbt, используя set и точку с запятой ;

set Compile/doc/target := baseDirectory.value / ".." / "docs"; doc

Причина, по которой синтаксис / работает: потому что File неявно преобразуется в sbt RichFile, который предоставляет дополнительные полезные методы расширения.

1 голос
/ 12 июля 2020

baseDirectory.value относится к типу java.io.File, поэтому вы можете использовать все эти методы:

https://docs.oracle.com/javase/7/docs/api/java/io/File.html

Соответствующим здесь будет getParentFile.

...