嵌套的maven多模块spring boot项目
Posted
技术标签:
【中文标题】嵌套的maven多模块spring boot项目【英文标题】:Nested maven multi module spring boot project 【发布时间】:2020-10-18 01:42:38 【问题描述】:所以我想构建一个具有以下结构的项目:
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,用于父 pom 和模块 1,而包装结构为模块 1、模块 2 和模块 3 的子模块。 现在当我运行 mvn clean install 时,我得到了这个错误:
org.apache.maven.lifecycle.LifecycleExecutionException:无法在项目 foo-module3 上执行目标:无法解析项目 com.org:foo-module3:jar:0.0.1-SNAPSHOT 的依赖项:找不到 com。 ***/libs-snapshot 中的 org:foo-module1:jar:0.0.1-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 -rf :foo-module3
【问题讨论】:
【参考方案1】:这种方法没有错。事实上,我已经建立了一个具有类似设计的项目。如果您添加了 module1 和 module2 作为 module3 的依赖项,那么您必须首先确保将 module1 和 module2 安装在本地 .m2 存储库中。
为了进行测试,您可以先在模块 1 和模块 2 中运行 mvn install
。在 mvn 控制台日志中,您也会看到 /path/to/your/module1/jar 安装在 /local/directory/.m2/... 中,您可以验证您的模块是否安装正确。
然后就可以在module3中运行mvn isntall....
【讨论】:
以上是关于嵌套的maven多模块spring boot项目的主要内容,如果未能解决你的问题,请参考以下文章
带有 Spring Data 的 Spring Boot Maven 多模块项目
了解多模块项目中的 Spring Boot Maven 插件