maven не может разрешить зависимость
У меня есть проект multi maven. Когда я пытаюсь создать сайт, например, выполнить maven site
в родительском проекте, он не может разрешить зависимость от одного из модулей. Но если я просто скомпилирую (mvn clean compile
on parent project), он или запустил тесты (mvn clean test
в родительском проекте), проблем с зависимостями нет.
Что может вызвать такое поведение?
UPD
Версия Maven
Apache Maven 3.0.2 (r1056850; 2011-01-09 02:58:10+0200)
Java version: 1.6.0_26, vendor: Sun Microsystems Inc.
Java home: c:\Program Files\Java\jdk1.6.0_26\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"
Версия maven-site-plugin
[DEBUG] Included: org.apache.maven.plugins:maven-site-plugin:jar:2.0.1
Сообщение об ошибке
[ERROR] Failed to execute goal on project myproj-client: Could not resolve dependencies for project mycompany.myproj:myproj-client:jar:0.0.1-SNAPSHOT: Could not find artifact mycompany.myproj:myproj-common:jar:0.0.1-SNAPSHOT -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal on project myproj-client: Could not resolve dependencies for project mycompany.myproj:myproj-client:jar:0.0.1-SNAPSHOT: Could not find artifact mycompany.myproj:myproj-common:jar:0.0.1-SNAPSHOT
at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies(LifecycleDependencyResolver.java:190)
at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies(LifecycleDependencyResolver.java:104)
at org.apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved(MojoExecutor.java:258)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:201)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:319)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:534)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
Caused by: org.apache.maven.project.DependencyResolutionException: Could not resolve dependencies for project mycompany.myproj:myproj-client:jar:0.0.1-SNAPSHOT: Could not find artifact mycompany.myproj:myproj-common:jar:0.0.1-SNAPSHOT
at org.apache.maven.project.DefaultProjectDependenciesResolver.resolve(DefaultProjectDependenciesResolver.java:156)
at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies(LifecycleDependencyResolver.java:165)
... 22 more
Caused by: org.sonatype.aether.resolution.ArtifactResolutionException: Could not find artifact mycompany.myproj:myproj-common:jar:0.0.1-SNAPSHOT
at org.sonatype.aether.impl.internal.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:526)
at org.sonatype.aether.impl.internal.DefaultRepositorySystem.resolveArtifacts(DefaultRepositorySystem.java:304)
at org.sonatype.aether.impl.internal.DefaultRepositorySystem.resolveDependencies(DefaultRepositorySystem.java:334)
at org.apache.maven.project.DefaultProjectDependenciesResolver.resolve(DefaultProjectDependenciesResolver.java:150)
... 23 more
Caused by: org.sonatype.aether.transfer.ArtifactNotFoundException: Could not find artifact mycompany.myproj:myproj-common:jar:0.0.1-SNAPSHOT
at org.sonatype.aether.impl.internal.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:517)
... 26 more
[ERROR]
[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/DependencyResolutionException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR] mvn <goals> -rf :myproj-client
Ответы
Ответ 1
У меня такая же проблема. Я не слишком часто копался в исходном коде Maven. Но вот мое наблюдение.
Предполагалось, что вы никогда не mvn install
myproj-common в своем локальном репозитории, не развертываете его в каких-либо удаленных репозиториях. Когда вы запускаете mvn clean site
в родительском проекте, все происходит так:
- maven определяет порядок myproj-common перед myproj-клиентом в соответствии с их зависимостью
-
mvn clean site
работает на myproj-common. Все предыдущие результаты в myproj-common/target удаляются, и создается myproj-common/target/site. (Обратите внимание, что после этого шага в myproj-common/target отсутствуют ни скомпилированные классы, ни упакованные jar) -
mvn clean site
запускается на myproj-client. Maven сначала проверяет зависимость этого проекта и пытается найти артефакт myproj-common (классы или jar) в этих местах: (a) myproj-common/target (b) локальный репозиторий (3) удаленные репозитории. -
mvn site
не работает на myproj-client, так как он не может найти артефакт myproj-common
Это объясняет, почему mvn clean compile site
и mvn clean package site
работают. Оба они подготовили myproj-общие артефакты в своем целевом каталоге до того, как mvn site
работать на myproj-client.
И mvn install
за которой следует mvn site
также работает.
Особое исключение состоит в том, что если вы помещаете что-то вроде emma-maven-plugin в отчетность, он автоматически компилирует и классы инструментов. В этом случае mvn clean site
всегда работает.
Я не уверен, почему Maven пытается найти myproj-common jar на шаге 3, он, похоже, не имеет ничего общего с mvn site
. Исключение происходит довольно рано в ядре maven, прежде чем попасть в maven-site-plugin. Это выглядит не как проблема maven-site-plugin, а как общее поведение всех жизненных циклов maven (кроме чистых, я считаю).
Ответ 2
Это может быть проблемой, когда плагин сайта не имеет доступа к реактору и, следовательно, не видит, что артефакт проекта доступен в ваших источниках проекта. (Это всего лишь гипотеза, возможно, поддерживаемая MSITE-302.)
Попробуйте запустить первую mvn install
, которая устанавливает ваши артефакты в локальном репозитории, а затем запускает mvn site
.
Для получения дополнительной информации о реакторе, попробуйте:
Ответ 3
я столкнулся с тем же, но для struts и paypal_base dependecies, я исправил это следующим образом.
- я проверил и обнаружил, что файлы jar не существуют в соответствующей папке в репозитории maven (.m2/reposotory....).
-
Я установил эти файлы jar с помощью следующей команды mvn
mvn install: install-file -Dfile = C:\Dependencies\paypal_base.jar\-DgroupId = paypal -DartifactId = paypal_base -Dversion = 0.1\-Dpackaging = jar
а также
mvn install:install-file -Dfile=C:\Dependencies\struts.jar \
-DgroupId=struts -DartifactId=struts -Dversion=0.1 \
-Dpackaging=jar
(-Dfile - это расположение файла jar в вашей системе)
- Перестройте проект Maven.
- Мой проект был успешным.
вы должны проверить банку, и использовать выше инструкции jar не существует. возможно, это будет полезно.
Ответ 4
Хех, по какой-то причине, после того, как я внес некоторые изменения в модули и родительские файлы pom, проблема исчезла. Я точно не знаю, что было сделано, но в настоящее время mvn site
на родительском проекте работает нормально. К сожалению, у меня нет времени для изучения того, что является корнем проблемы. Но похоже, что изменение версии сайта до 3.0 поставило меня на правильный путь. Также я мог выполнить сайт (до его исправления) следующим образом: mvn compile site
, в этом случае он мог бы найти зависимость.
Ответ 5
Похоже, что maven ищет myproj-common: jar: 0.0.1-SNAPSHOT в репозитории.
Причиной сбоя может быть: maven не может получить доступ к артефактам моментальных снимков в репозитории.
Чтобы включить артефакты моментальных снимков:
пожалуйста, проверьте pom.xml для тега моментальных снимков в разделе репозитория.
<repository>
<name>xyz</name>
<id>repoid</id>
<url>http://x.y.z</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
Ответ 6
На веб-сайте Apache:
site: сайт используется для создания сайта для одного проекта. Обратите внимание, что ссылки между сайтами модулей в сборке нескольких модулей не будут работать.