Во-первых, я хотел бы дать ответ на этот ответ анонимному пользователю stackoverflow - я уверен, что видел аналогичный ответ здесь раньше, - но теперь я не могу его найти.
Лучшим вариантом для локальных файлов jar в качестве зависимости является создание локального репозитория maven. Такое репо - это не что иное, как правильная структура каталогов с файлами pom.
В моем примере: у меня есть главный проект в ${master_project}
месте, а subroject1 находится на ${master_project}/${subproject1}
, тогда я создаю mvn-репозиторий в: ${master_project}/local-maven-repo
В файле pom в подпроекте1 необходимо указать репозиторий ${master_project}/${subproject1}/pom.xml
, который будет использовать путь к файлу в качестве параметра url:
local-maven-repo
file:///${project.parent.basedir}/local-maven-repo
Зависимость может быть задана как для любого другого репозитория. Это делает ваш репозиторий pom независимым. Например, если желаемая банка доступна в центральном центре maven, вам просто нужно удалить ее из своего локального репо, и она будет вытащена из репо по умолчанию.
org.apache.felix
org.apache.felix.servicebinder
0.9.0-SNAPSHOT
Последнее, но не менее важное: добавить файл jar в локальный репозиторий с помощью переключателя -DlocalRepositoryPath, как здесь:
mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file \
-Dfile=/some/path/on/my/local/filesystem/felix/servicebinder/target/org.apache.felix.servicebinder-0.9.0-SNAPSHOT.jar \
-DgroupId=org.apache.felix -DartifactId=org.apache.felix.servicebinder \
-Dversion=0.9.0-SNAPSHOT -Dpackaging=jar \
-DlocalRepositoryPath=${master_project}/local-maven-repo
В одном файле jar установлен такой mvn repo может быть привязан к репозиторию кода, а вся настройка не зависит от системы. ( рабочий пример в github )
Я согласен, что использование JAR для репозитория исходного кода не является хорошей практикой, но в реальной жизни быстрое и грязное решение иногда лучше, чем полная развязка репо, чтобы разместить одну банку, которую вы не можете опубликовать.
Попробуйте заменить ~
на $HOME
. Расширение Тильды происходит только тогда, когда тильда не кавыдается. См. info "(bash) Tilde Expansion"
.
Вы также можете сделать file=~/Desktop
без цитирования, но если вы когда-нибудь замените часть этого чем-то разделителем поля в нем, тогда он сломается. Котировка значений переменных, вероятно, хорошая вещь, чтобы привыкнуть в любом случае. Котировка переменной file=~/"Desktop"
также будет работать, но я думаю, что это довольно уродливо.
Еще одна причина предпочесть $HOME
, когда это возможно: расширение тильды происходит только в начале слов. Таким образом, command --option=~/foo
будет работать только в том случае, если command
сам делает расширение тильды, которое будет меняться по команде, в то время как command --option="$HOME/foo"
всегда будет работать.
FYI, вы также можете использовать eval
:
eval "echo "TESTING" > $file"
eval
принимает команду в качестве аргумента, и она заставляет оболочку выполнять расширение Tilde .