Maven не может разрешить зависимость - PullRequest
11 голосов
/ 14 октября 2011

У меня есть мультимодульный проект Maven. Когда я пытаюсь создать сайт, например, выполнить maven site в родительском проекте, он не может разрешить зависимость от одного из модулей. Но если я просто скомпилирую (mvn clean compile в родительском проекте) его или запустите тесты (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

Ответы [ 6 ]

12 голосов
/ 28 октября 2011

У меня такая же проблема.Я не слишком много копался в исходном коде Maven.Но вот мое наблюдение.

Предполагается, что вы никогда не mvn install myproj-common в своем локальном хранилище и не развертывали его в каких-либо удаленных хранилищах.Когда вы запускаете mvn clean site в родительском проекте, все происходит следующим образом:

  1. maven определяет порядок myproj-common до myproj-client в соответствии с их зависимостями
  2. mvn clean site запускается на myproj-common .Все предыдущие результаты в myproj-common / target удаляются, и генерируется myproj-common / target / site .(Обратите внимание, что после этого шага ни скомпилированные классы, ни упакованные jar не существуют в myproj-common / target )
  3. mvn clean site работает на myproj-client .Maven сначала проверяет зависимость этого проекта и пытается найти артефакт myproj-common (классы или jar) в следующих местах: (a) myproj-common / target (b) локальный репозиторий (3) удаленные репозитории.
  4. mvn site не работает на myproj-client , поскольку он не может найти артефакт myproj-common

Это объясняет, почему mvn clean compile site и mvn clean package site работает.Они оба подготовили бы myproj-common артефактов в своем целевом каталоге до того, как mvn site запустит myproj-client .

И mvn install, за которым следует mvn siteработает также.

Особое исключение состоит в том, что если вы добавите что-то вроде emma-maven-plugin в отчет, он автоматически скомпилирует и изменит классы.В этом случае mvn clean site всегда работает.

Я не уверен, почему Maven пытается найти банку myproj-common на шаге 3, похоже, она не имеет ничего общего с mvn site.Исключение случается довольно рано в ядре maven, прежде чем попасть в плагин maven-site-plugin.Это похоже не на проблему maven-site-plugin, а на общее поведение всех жизненных циклов maven (кроме clean , я полагаю).

3 голосов
/ 23 ноября 2015

Я столкнулся с тем же, но для структур и зависимостей paypal_base, я исправил это, выполнив следующее.

  1. Я проверил и обнаружил, что jar-файлов не существует в соответствующей папке в репозитории maven (.m2 / reposotory ....).
  2. Я установил эти 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, и используйте приведенную выше инструкцию, если jar не существует.может быть это будет полезно.

3 голосов
/ 15 октября 2011

Это может быть связано с тем, что плагин сайта не имеет доступа к реактору и, следовательно, не видит, что артефакт проекта доступен в источниках вашего проекта. (Это всего лишь гипотеза, возможно поддерживаемая MSITE-302 .)

Попробуйте сначала запустить mvn install, который установит ваши артефакты в локальный репозиторий, а затем запустить mvn site.

Для получения дополнительной информации о реакторе, попробуйте:

1 голос
/ 15 октября 2011

Хех, по некоторым причинам, после того, как я сделал некоторые изменения в файлах модуля и родительского pom, проблема исчезла.Я не знаю точно, что было сделано, но в настоящее время mvn site на родительском проекте работает нормально.К сожалению, у меня нет времени, чтобы выяснить, в чем корни проблемы.Но похоже, что изменение версии сайта на 3.0 поставило меня на правильный путь.Также я мог выполнить сайт (до того, как он был исправлен) следующим образом mvn compile site, в этом случае он мог найти зависимость.

0 голосов
/ 15 октября 2011

Похоже, что 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>
0 голосов
/ 14 октября 2011

С веб-сайта Apache :

site: site используется для создания сайта для одного проекта. Обратите внимание, что ссылки между сайтами модулей в многокомпонентной сборке не будут работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...