我们有一个Gradle v6.8.2多模块项目,其结构如下:
.
├── searchapi
│ ├── build.gradle
│ └── settings.gradle
├── searchcommon
│ ├── build.gradle
│ └── settings.gradle
├── searchconfig
│ ├── build.gradle
│ └── settings.gradle
├── searchindexer
│ ├── build.gradle
│ └── settings.gradle
├── build.gradle
└── settings.gradle
子模块有许多重叠的依赖项(例如commons-lang
),我们使用如下变量指定父模块build.gradle
中这些依赖项的版本:ext.commonslangversion = "[2,3)"
然后,在子项目中,我们将依赖关系指定为:implementation "commons-lang:commons-lang:${commonslangversion}"
顶级构建本身在CLI和Intellij(v2022.1.4)中运行良好。
我遇到的问题是,当我试图在Intellij的一个子项目中运行代码时。具体来说,在searchindexer
模块中,我有一个包含main()
方法的类。当我右键单击并选择运行此方法时,我收到一个生成错误,内容如下:
A problem occurred evaluating root project 'searchindexer'.
> Could not get unknown property 'commonslangversion' for object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
有什么想法吗?
更令人困惑的是,如果我将main()
方法的主体移到我的一个JUnit测试类方法中,并在Intellij中执行测试,它会构建并运行得很好。
1条答案
按热度按时间gcuhipw91#
在gradle多项目构建中,您必须只有一个位于根项目级别的
settings.gradle
脚本。这里,您在每个子项目下放置了一个设置文件,因此gradle和intellij都不会将其视为多项目构建:子项目将被视为独立项目,并且不会继承在根项目级别上设置配置或属性只需从子项目中删除
settings.gradle
文件。