рабочий каталог в сбт

Я хотел бы иметь возможность запустить программу Java в определенном каталоге. Я думаю, что это довольно удобно для параметризации рабочего каталога, потому что он позволяет легко управлять конфигурациями.

Например, в одной папке вы можете иметь конфигурацию для тестирования, в другой - ресурсы, необходимые для производства. Вы, вероятно, думаете, что есть возможность манипулировать classpath для включения / исключения ресурсов, но такое решение работает, только если вы заинтересованы в ресурсах, хранящихся в classpath, и ссылаетесь на них, используяClassloader.getResource(r), Но что, если у вас есть какая-то внешняя конфигурация и вы хотите получить к ней доступ, используя простые инструкции, такие какFile file = new File("app.properties");?

Давайте посмотрим обычный пример. <, / P>

Ваше приложение используетapp.properties файл, в котором хранятся учетные данные для внешнего сервиса. Приложение ищет этот файл в рабочем каталоге, потому что вы используете упомянутыеFile file = new File("app.properties"); Инструкция для доступа к нему. В ваших тестах вы хотите использоватьapp.properties специфичные для ваших тестов. В ваших интеграционных тестах вы хотите использоватьapp.properties специфичные для другой среды. И, наконец, когда вы создаете и выпускаете приложение, вы хотите предоставить другимapp.properties файл. Все эти ресурсы, к которым вы хотите получить доступ всегда одинаково, просто набравFile file = new File("app.properties"); вместо (псевдокод):

if(configTest) 
    file = File("testWorkDir/app.properties");
else if(config2) 
    file = File("config2WorkDir/app.properties");
else 
    file = File("app.properties");

или вместо использования ресурсов в classpath

this.getClass.getClassLoader.getResource("app.properties");

Конечно, вы умный программист и используете инструмент сборки, такой как maven, gradle или sbt:)

Достаточно с самого начала. По крайней мере, вопрос:

Есть ли способ установить рабочий каталог в Java, и если да, как настроить его в средствах сборки (особенно в sbt)?

Дополнительная информация:

изменение системного свойства 'user.dir' не работает (я пытался изменить его программно).В сбт смена«рабочий каталог» через настройку baseDirectory для тестаменяет baseDirectory, который не является базовым dir в моем understangind и не равенnew java.io.File(".").getAbsolutePath.Предоставление переменной среды, такой как YOUR_APP_HOME, и ссылки на ресурсы из этого пути возможно, но об этом нужно помнить в своем коде.

Ответы на вопрос(2)

Ваш ответ на вопрос