首页 > 解决方案 > 嵌套的maven多模块spring boot项目

问题描述

所以我想构建一个具有以下结构的项目:

Project[pom.xml]
-----module 1[pom.xml]
     -----sub-module 1[pom.xml]
     -----sub-module 2[pom.xml]
     -----sub-module 3[pom.xml]
-----module 2[pom.xml]
-----module 3[pom.xml]

现在,模块 1 和模块 2 是模块 3 的依赖项。


问题1:这种方法是错误的吗?


问题2:当我实现这个时,项目的包装结构为父pom和模块1的pom,而模块1、模块2和模块3的子模块的包装结构jar。现在当我运行mvn clean install时,我得到了这个错误:

org.apache.maven.lifecycle.LifecycleExecutionException:无法在项目 foo-module3 上执行目标:无法解析项目 com.org:foo-module3:jar:0.0.1-SNAPSHOT 的依赖项:找不到 com.org:foo -module1:jar:0.0.1-SNAPSHOT in ***/libs-snapshot 被缓存在本地仓库中,直到central2的更新间隔过去或强制更新后才会重新尝试解析
    在 org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies (LifecycleDependencyResolver.java:269)
    在 org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies (LifecycleDependencyResolver.java:147)
    在 org.apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved (MojoExecutor.java:248)
    在 org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:202)
    在 org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    在 org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    在 org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    在 org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    在 org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
    在 org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    在 org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    在 org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
    在 org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
    在 org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
    在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
    在 sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    在 sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    在 java.lang.reflect.Method.invoke (Method.java:498)
    在 org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    在 org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    在 org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    在 org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
原因:org.apache.maven.project.DependencyResolutionException:无法解析项目 com.org:foo-module3:jar:0.0.1-SNAPSHOT 的依赖项:找不到 com.org:foo-module1:jar:0.0。 ***/libs-snapshot 中的 1-SNAPSHOT 已缓存在本地存储库中,直到 central2 的更新间隔过去或强制更新后才会重新尝试解析
    在 org.apache.maven.project.DefaultProjectDependenciesResolver.resolve (DefaultProjectDependenciesResolver.java:209)
    在 org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies (LifecycleDependencyResolver.java:243)
    在 org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies (LifecycleDependencyResolver.java:147)
    在 org.apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved (MojoExecutor.java:248)
    在 org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:202)
    在 org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    在 org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    在 org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    在 org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    在 org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
    在 org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    在 org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    在 org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
    在 org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
    在 org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
    在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
    在 sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    在 sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    在 java.lang.reflect.Method.invoke (Method.java:498)
    在 org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    在 org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    在 org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    在 org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
引起:org.eclipse.aether.resolution.DependencyResolutionException: 找不到com.oorg:foo-module1:jar:0.0.1-SNAPSHOT in ***/libs-snapshot 缓存在本地仓库,解析不会重新尝试,直到 central2 的更新间隔已过或强制更新
    在 org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveDependencies (DefaultRepositorySystem.java:357)
    在 org.apache.maven.project.DefaultProjectDependenciesResolver.resolve (DefaultProjectDependenciesResolver.java:202)
    在 org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies (LifecycleDependencyResolver.java:243)
    在 org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies (LifecycleDependencyResolver.java:147)
    在 org.apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved (MojoExecutor.java:248)
    在 org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:202)
    在 org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    在 org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    在 org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    在 org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    在 org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
    在 org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    在 org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    在 org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
    在 org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
    在 org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
    在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
    在 sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    在 sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    在 java.lang.reflect.Method.invoke (Method.java:498)
    在 org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    在 org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    在 org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    在 org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
原因:org.eclipse.aether.resolution.ArtifactResolutionException: 找不到 com.org:foo-module1:jar:0.0.1-SNAPSHOT in ***/libs-snapshot 缓存在本地仓库,解析不会重新尝试,直到 central2 的更新间隔已过或强制更新
    在 org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve (DefaultArtifactResolver.java:424)
    在 org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts (DefaultArtifactResolver.java:229)
    在 org.jfrog.build.extractor.maven.resolver.ArtifactoryEclipseArtifactResolver.resolveArtifacts (ArtifactoryEclipseArtifactResolver.java:56)
    在 org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveDependencies (DefaultRepositorySystem.java:340)
    在 org.apache.maven.project.DefaultProjectDependenciesResolver.resolve (DefaultProjectDependenciesResolver.java:202)
    在 org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies (LifecycleDependencyResolver.java:243)
    在 org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies (LifecycleDependencyResolver.java:147)
    在 org.apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved (MojoExecutor.java:248)
    在 org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:202)
    在 org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    在 org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    在 org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    在 org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    在 org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
    在 org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    在 org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    在 org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
    在 org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
    在 org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
    在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
    在 sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    在 sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    在 java.lang.reflect.Method.invoke (Method.java:498)
    在 org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    在 org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    在 org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    在 org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
引起:org.eclipse.aether.transfer.ArtifactNotFoundException: Failure to find com.org:foo-module1:jar:0.0.1-SNAPSHOT in ***/libs-snapshot 缓存在本地仓库,解析不会重新尝试,直到 central2 的更新间隔已过或强制更新
    在 org.eclipse.aether.internal.impl.DefaultUpdateCheckManager.newException (DefaultUpdateCheckManager.java:218)
    在 org.eclipse.aether.internal.impl.DefaultUpdateCheckManager.checkArtifact (DefaultUpdateCheckManager.java:193)
    在 org.eclipse.aether.internal.impl.DefaultArtifactResolver.gatherDownloads (DefaultArtifactResolver.java:559)
    在 org.eclipse.aether.internal.impl.DefaultArtifactResolver.performDownloads (DefaultArtifactResolver.java:483)
    在 org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve (DefaultArtifactResolver.java:401)
    在 org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts (DefaultArtifactResolver.java:229)
    在 org.jfrog.build.extractor.maven.resolver.ArtifactoryEclipseArtifactResolver.resolveArtifacts (ArtifactoryEclipseArtifactResolver.java:56)
    在 org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveDependencies (DefaultRepositorySystem.java:340)
    在 org.apache.maven.project.DefaultProjectDependenciesResolver.resolve (DefaultProjectDependenciesResolver.java:202)
    在 org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies (LifecycleDependencyResolver.java:243)
    在 org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies (LifecycleDependencyResolver.java:147)
    在 org.apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved (MojoExecutor.java:248)
    在 org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:202)
    在 org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    在 org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    在 org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    在 org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    在 org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
    在 org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    在 org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    在 org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
    在 org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
    在 org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
    在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
    在 sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    在 sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    在 java.lang.reflect.Method.invoke (Method.java:498)
    在 org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    在 org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    在 org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    在 org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
[错误]
[错误] 使用 -X 开关重新运行 Maven 以启用完整的调试日志记录。
[错误]
[错误] 有关错误和可能的解决方案的更多信息,请阅读以下文章:
[错误] [帮助 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException
[错误]
[错误] 更正问题后,您可以使用命令恢复构建
[错误] mvn <args> -rf :foo-module3

标签: javaspringspring-bootmavenintellij-idea

解决方案


这种方法没有错。事实上,我已经建立了一个具有类似设计的项目。如果您添加了 module1 和 module2 作为 module3 的依赖项,那么您必须首先确保 module1 和 module2 安装在本地 .m2 存储库中。

为了进行测试,您可以mvn install先在 module1 和 module2 中运行。在 mvn 控制台日志中,您也会看到 /path/to/your/module1/jar 安装在 /local/directory/.m2/... 中,您可以验证您的模块是否安装正确。然后你可以在 module3 中运行 mvn isntall....


推荐阅读