Bor*_*ijk 11 java eclipse compilation multi-project gradle
我在Eclipse中有一个包含多个子项目的Gradle项目.我目前有子项目A,B和C.
项目A应该可以访问项目B.项目B应该可以访问项目C.但是项目A 不应该访问项目C.
A -> B, B -> C, but not A -> C
Run Code Online (Sandbox Code Playgroud)
我可以通过在Project A中使用java示例类来尝试使用Project C中的类来轻松地测试它.
我使用Gradle在主build.gradle文件中使用以下设置并使用transitive属性实现了这一点:
project(':projectA') {
dependencies {
compile project(':projectB'), {
transitive = false
}
}
}
project(':projectB') {
dependencies {
compile project(':projectC'), {
transitive = false
}
}
}
Run Code Online (Sandbox Code Playgroud)
compileJava在Project A的示例类上运行Gradle 会给出正确的错误消息.我想将此错误作为Eclipse中的编译错误.我还能够以所需关系保持的方式手动配置类路径,但Gradle Refresh/Rebuild再次重置类路径.
是否可以使用Gradle的Java编译器而不是Eclipse编译器?或者我应该在进行Gradle Refresh/Rebuild时影响类路径文件?可能有不同的解决方案吗?
我想知道这种情况的首选方法是什么.谢谢!
您可以使用 gradle eclipse 插件从 gradle 修改 eclipse 项目设置,包括对 eclipse 类路径的更改。我会在 build.gradle 中尝试这样的事情:
allprojects{
apply plugin:'eclipse'
eclipse.classpath.file {
beforeMerged { classpath -> classpath.entries.removeAll{it} }
}
}
Run Code Online (Sandbox Code Playgroud)
然后运行gradle eclipseClasspath重新生成.classpath文件,并在eclipse中一般刷新/F5来拾取修改后的.classpath文件。
我从 build.gradle 开始transitive=true。当 A 中的类实例化 C 中的类时,我不会收到编译错误。
现在我更改为transitive=falsebuild.gradle 这会导致命令行编译失败,但 eclipse 对旧的依赖信息很满意。右键->Gradle->Refresh Project没有效果。要使 gradle 接受更改,请运行gradle eclipseClasspath
gradle eclipseClasspath
:eclipseClasspath
:A:eclipseClasspath
:B:eclipseClasspath
:C:eclipseClasspath
Run Code Online (Sandbox Code Playgroud)
并让 Eclipse 通过刷新获取更改后的 .classpath 文件。
这使得 Eclipse 能够识别缺失的传递性并抛出编译错误:
此时我的完整根 build.gradle :
allprojects{
apply plugin:'java'
apply plugin:'eclipse'
eclipse.classpath.file {
beforeMerged { classpath -> classpath.entries.removeAll {it} }
}
}
project(':A').dependencies {
compile project(':B'),{ transitive = false }
}
project(':B').dependencies {
compile project(':C'),{ transitive = false }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
494 次 |
| 最近记录: |