Будете ли вы иметь лучшее и не то болезненное решение?
ужно создавать и выпускать проекты, используя Jenkins, на сервере без доступа к maven central и даже без доступа к Nexus.
Учитывая, что у меня есть доступ к maven-central на машинах разработчиков, для заполнения maven local_repository я мог бы сделать
mvn dependency:resolve-plugins dependency:go-offline
затем скопировать local_repository на сервер Linux.
Затем, чтобы подвезтиNon-resolvable parent POM
ошибка, как описаноВотЯ заполнил определенные профили для обоих окон (dev) и linux (jenkins) поддельным центральным профилем, чтобы переопределить ссылку maven-central, сделанную моим родительским pom:
<profiles>
<profile>
<id>windows</id>
<activation>
<os>
<family>Windows</family>
</os>
</activation>
<properties> <repository.base.url>file:///c:/maven_distribution_repo/</repository.base.url>
</properties>
</profile>
<profile>
<id>linux</id>
<activation>
<os>
<family>Linux</family>
</os>
</activation>
<properties>
<repository.base.url>file:///appli/Maven_3.1.1_build/maven_distribution_repo/</repository.base.url>
</properties>
<repositories>
<repository>
<id>central</id>
<name>Maven Plugin Repository</name>
<!--<url>http://repo1.maven.org/maven2</url>-->
<url>${repository.base.url}</url>
<releases>
<enabled>false</enabled>
</releases>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<name>Maven Plugin Repository</name>
<!--<url>http://repo1.maven.org/maven2</url>-->
<url>${repository.base.url}</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<updatePolicy>never</updatePolicy>
</releases>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
Сюда,mvn -o compile
еще поднятьNon-resolvable parent POM
ошибка!, но используя--legacy-local-repository
предложенный вариантВот удалось подделать удаленный репозиторий с помощью локальногоNon-resolvable parent POM
проблема исчезла:
mvn --legacy-local-repository compile
Все-таки странная ошибка появилась (описанаВот):
[ERROR] Failed to execute goal on project myProject: Could not resolve dependencies for project some.package:myProject:war:0.0.7-SNAPSHOT: Failed to collect dependencies at org.jxls:jxls-poi:jar:1.0.11 -> org.jxls:jxls:jar:[2.0.0,): org.jxls:jxls:jar:[2.0.0,) within specified range -> [Help 1]
Но оно скрывало раннее предупреждение:
[WARNING] Could not transfer metadata org.jxlsjxls/maven-metadata.xml from/to central (/path):/appli/Maven_3.1.1_build/maven_distribution_repo/org/jxls/jxls/maven-metadata-central.xml (access forbidden)
Используя --legacy-local-repository, maven, похоже, использует путь к репозиторию распределения в качестве локального репозитория libs!
Я поменял их в помпе:
<profile>
<id>linux</id>
<activation>
<os>
<family>Linux</family>
</os>
</activation>
<properties>
<!--<repository.base.url>file:///appli/Maven_3.1.1_build/maven_distribution_repo/</repository.base.url>-->
<repository.base.url>file:///appli/Maven-3.1.1_build/maven_local_repo/</repository.base.url>
</properties>
...
и пришлось также скопировать в локальный репозиторий: всеmaven-metadata-maven2_central.xml
вmaven-metadata.xml
используя следующую команду bash:
for file in $(find /appli/Maven-3.1.1_build/maven_local_repo -type f -name 'maven-metadata-maven2_central.xml'); do cp $file $(echo ${file%/*}/maven-metadata.xml); done
И ... БИНГО!
СТРОИТЬ УСПЕШНОЕ
Кажется странным, на более позднем этапе, чтобыrelease:perform
в локальный репозиторий lib.
Будете ли вы иметь лучшее и не то болезненное решение?