Подтвердить что ты не робот

Maven: попытка развертывания с учетными данными в файле settings.xml

Казалось, что он работает на прошлой неделе, и теперь это не так.

  • Мы используем Artifactory как наш репозиторий Maven.
  • Я использую jar и pom, используя цель deploy:deploy-file
  • Наш репозиторий Artifactory требует развертывания аутентификации.

Я могу развернуть в репозиторий, введя мои учетные данные в URL-адрес сервера в командной строке:

 $ mvn deploy:deploy-file \
     -Durl=http://deployer:[email protected]/artifactory/ext-release-local \
     -Dfile=crypto.jar \
     -DpomFile=pom.xml \
     -Did=VeggieCorp
  yadda...yadda...yadda...
  [INFO] ------------------------------------------------------------------------
  [INFO] BUILD SUCCESS
  [INFO] ------------------------------------------------------------------------
  [INFO] Total time: 0.962s
  [INFO] Finished at: Mon Aug 20 10:06:04 CDT 2012
  [INFO] Final Memory: 4M/118M
  [INFO] ------------------------------------------------------------------------

Тем не менее, все развертывание будет регистрироваться, и мои учетные данные будут видны в журнале. Поэтому я хочу иметь возможность развертывать без моих учетных данных в командной строке. Для этого у меня есть файл $HOME/.m2/settings.xml:

<settings>
    <proxies>
        <proxy>
            <active>true</active>
            <protocol>http</protocol>
            <host>proxy.veggiecorp.com</host>
            <port>3128</port>
            <nonProxyHosts>*.veggiecorp.com</nonProxyHosts>
        </proxy>
    </proxies>
    <servers>
        <server>
            <id>VeggieCorp</id>
            <username>deployer</username>
            <password>swordfish</password>
        </server>
    </servers>
    <profiles>
        <profile>
            <id>VeggieCorp</id>
            <activation>
                 <activeByDefault>true</activeByDefault>
            </activation>
            <repositories>
                <repository>
                    <id>VeggieCorp</id>
                    <name>VeggieCorp Maven Repository</name>
                    <releases>
                        <enabled>true</enabled>
                        <updatePolicy>always</updatePolicy>
                        <checksumPolicy>warn</checksumPolicy>
                    </releases>
                    <snapshots>
                        <enabled>false</enabled>
                        <updatePolicy>always</updatePolicy>
                        <checksumPolicy>warn</checksumPolicy>
                    </snapshots>
                    <url>http://repo.veggiecorp.com/artifactory/ext-release-local</url>
                    <layout>default</layout>
                </repository>
            </repositories>
        </profile>
    </profiles>
    <activeProfiles>
        <activeProfile>VeggieCorp</activeProfile>
    </activeProfiles>
</settings>

Теперь я попробую развернуть снова, но не помещая имя пользователя и пароль в URL-адрес:

 $ mvn deploy:deploy-file \
     -Durl=http://repo.veggiecorp.com/artifactory/ext-release-local \
     -Dfile=crypto.jar \
     -DpomFile=pom.xml \
     -Did=VeggieCorp
yadda...yadda...yadda
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.751s
[INFO] Finished at: Mon Aug 20 10:17:15 CDT 2012
[INFO] Final Memory: 4M/119M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy-  file (default-cli) on project crypto:
 Failed to deploy artifacts: Could not transfer artifact  
    com.veggiecorp:crypto:jar:2.0.0 from/to remote-repository 
    (http://mvn.veggiecorp.com/artifactory/ext-release-local):
    Failed to transfer file:
    http://mvn.veggiecorp.com/artifactory/ext-release-local/com/veggiecorp/crypto/2.0.0/crypto-2.0.0.jar.
    Return code is: 401, ReasonPhrase:Unauthorized. -> [Help 1]

(Я переформатировал вывод, чтобы его было легче видеть. Я получаю ошибку 401 "Несанкционированная" )

Итак, что я делаю неправильно? Почему я не могу использовать мой файл .settings.xml для выполнения моих учетных данных? Прокси-часть работает, потому что она может загрузить необходимые плагины из основного репозитория Maven.

4b9b3361

Ответ 1

Вам необходимо предоставить свойство repositoryId=VeggieCorp (not id), чтобы maven знал, из какой конфигурации <server> он должен прочитать учетные данные.

$ mvn deploy:deploy-file \
 -Durl=http://repo.veggiecorp.com/artifactory/ext-release-local \
 -Dfile=crypto.jar \
 -DpomFile=pom.xml \
 -DrepositoryId=VeggieCorp

См. http://maven.apache.org/plugins/maven-deploy-plugin/deploy-file-mojo.html

Ответ 2

Вы также можете указать идентификатор репозитория моментального снимка в дистрибутиве.

<distributionManagement>
<repository>
  <id>releases</id>
  <url>${env.MAVEN_RELEASE_REPOSITORY_URL}</url>
</repository>
<snapshotRepository>
  <id>snapshots</id>
  <url>${env.MAVEN_SNAPSHOT_REPOSITORY_URL}</url>
</snapshotRepository>
</distributionManagement>

идентификаторы здесь должны совпадать с идентификаторами в servers