Не удалось передать артефакт: свойство settings.xml не интерпретируется - PullRequest
1 голос
/ 30 мая 2019

Я пытаюсь собрать gitlab-ci в проекте с:

  • родительским pom, расположенным в нашем хранилище nexus (не в родительском каталоге)
  • с использованием maven.repo.url свойство установлено в settings.xml

Работает с pom.xml при замене записи repositories.repository.url с ${maven.repo.url}/public на жестко закодированный URLнапример, http://localhost:8081/nexus/content/repositories/public.Однако при попытке использовать набор свойств в settings.xml ошибки сборки сообщают, что

Не удалось перенести артефакт mygroup: myparent: 1.0-SNAPSHOT из / в myrepo ($ {maven.repo.url} / public).

.gitlab-ci.yml

image: maven:3.6.1-jdk-8-alpine

variables:
  MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode"
  MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"

cache:
  paths:
    - .m2/repository/

build:
  stage: build
  script:
    - mvn $MAVEN_CLI_OPTS clean compile

test:
  stage: test
  script:
    - mvn $MAVEN_CLI_OPTS test

deploy:
  stage: deploy
  script:
    - mvn $MAVEN_CLI_OPTS deploy
  only:
    - master

.m2 / настройки.xml (ПРИМЕЧАНИЕ: у меня установлено MAVEN_REPO_URL в переменных группы GitLab)

<settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns="http://maven.apache.org/SETTINGS/1.1.0"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0
                              https://maven.apache.org/xsd/settings-1.1.0.xsd">
    <!-- servers -->
    <!-- mirrors -->
    <profiles>
        <profile>
            <id>myprofile</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <maven.repo.url>${env.MAVEN_REPO_URL}</maven.repo.url>
            </properties>
        </profile>
    </profiles>
</settings>

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>mygroup</groupId>
        <artifactId>myparent</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>myartifact</artifactId>
    <name>myname</name>
    <version>1.0-SNAPSHOT</version>
    <repositories>
        <repository>
            <id>mynexus</id>
            <name>nexus repository</name>
            <url>${maven.repo.url}/public</url>
        </repository>
    </repositories>
    <!-- build, etc. -->
</project>

Я ожидаючто я должен иметь возможность использовать свойство maven.repo.url в моем pom.xml точно так же, как я использую его везде в моем pom.xml .Он отлично работает для удаления зависимостей, он просто не может вытащить мой родительский pom из удаленного хранилища Nexus.

Вот сообщение об ошибке maven:

$ mvn $MAVEN_CLI_OPTS clean compile
[INFO] Scanning for projects...
[WARNING] Could not transfer metadata mygroup:myparent:1.0-SNAPSHOT/maven-metadata.xml from/to myrepo (${maven.repo.url}/public): Cannot access ${maven.repo.url}/public with type default using the available connector factories: BasicRepositoryConnectorFactory
[ERROR] [ERROR] Some problems were encountered while processing the POMs:
[FATAL] Non-resolvable parent POM for mygroup:myartifact:1.0-SNAPSHOT: Could not transfer artifact mygroup:myparent:pom:1.0-SNAPSHOT from/to myrepo (${maven.repo.url}/public): Cannot access ${maven.repo.url}/public with type default using the available connector factories: BasicRepositoryConnectorFactory and 'parent.relativePath' points at wrong local POM @ line 3, column 10
 @ 
[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]   
[ERROR]   The project mygroup:myartifact:1.0-SNAPSHOT (/builds/gitlab/group1/myartifact/pom.xml) has 1 error
[ERROR]     Non-resolvable parent POM for mygroup:myparent:1.0-SNAPSHOT: Could not transfer artifact mygroup:myparent:1.0-SNAPSHOT from/to myrepo (${maven.repo.url}/public): Cannot access ${maven.repo.url}/public with type default using the available connector factories: BasicRepositoryConnectorFactory and 'parent.relativePath' points at wrong local POM @ line 3, column 10: Cannot access ${maven.repo.url}/public using the registered transporter factories: WagonTransporterFactory: Unsupported transport protocol -> [Help 2]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException
[ERROR] [Help 2] http://cwiki.apache.org/confluence/display/MAVEN/UnresolvableModelException
ERROR: Job failed: exit code 1

1 Ответ

1 голос
/ 10 июня 2019

Я обнаружил, что мне нужно включить репозиторий снимков , чтобы он мог загрузить родительский снимок pom.Вот обновленный .m2 / settings.xml :

<settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns="http://maven.apache.org/SETTINGS/1.1.0"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0
                              https://maven.apache.org/xsd/settings-1.1.0.xsd">
    <!-- servers -->
    <!-- mirrors -->
    <profiles>
        <profile>
            <id>myprofile</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <maven.repo.url>${env.MAVEN_REPO_URL}</maven.repo.url>
            </properties>
            <repositories>
                <repository>
                    <id>myrepo</id>
                    <url>${env.MAVEN_REPO_URL}/public</url>
                    <layout>default</layout>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
            </repositories>
        </profile>
    </profiles>
</settings>

Странно, что документация по настройке Apache Maven гласит, что снимки включены по умолчанию.

Наткнулся на этот пост , который указал мне правильное направление.

...