Нет такого файла или каталога при экспорте файлов с использованием сценария bash [duplicate]

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

34
задан ruakh 22 June 2014 в 08:13
поделиться

2 ответа

Попробуйте заменить ~ на $HOME. Расширение Тильды происходит только тогда, когда тильда не кавыдается. См. info "(bash) Tilde Expansion".

Вы также можете сделать file=~/Desktop без цитирования, но если вы когда-нибудь замените часть этого чем-то разделителем поля в нем, тогда он сломается. Котировка значений переменных, вероятно, хорошая вещь, чтобы привыкнуть в любом случае. Котировка переменной file=~/"Desktop" также будет работать, но я думаю, что это довольно уродливо.

Еще одна причина предпочесть $HOME, когда это возможно: расширение тильды происходит только в начале слов. Таким образом, command --option=~/foo будет работать только в том случае, если command сам делает расширение тильды, которое будет меняться по команде, в то время как command --option="$HOME/foo" всегда будет работать.

55
ответ дан Michael Hoffman 28 August 2018 в 01:03
поделиться

FYI, вы также можете использовать eval:

eval "echo "TESTING" > $file"

eval принимает команду в качестве аргумента, и она заставляет оболочку выполнять расширение Tilde .

1
ответ дан Sanghyun Lee 28 August 2018 в 01:03
поделиться