Gradle 的 Eclipse 多个项目中的访问限制
Access restrictions in Eclipse Multiple Projects with Gradle
我在 Eclipse 中有一个 Gradle 项目,由多个子项目组成。我目前有子项目 A、B 和 C。
项目 A 应有权访问项目 B。项目 B 应有权访问项目 C。但项目 A 不应 有权访问项目 C。
A -> B, B -> C, but not A -> C
我可以通过在项目 A 中尝试使用项目 C 中的 class 的 java 示例 class 来轻松测试。
我已经通过 Gradle 在主 build.gradle
文件中使用以下设置并使用 transitive
属性:
实现了这一点
project(':projectA') {
dependencies {
compile project(':projectB'), {
transitive = false
}
}
}
project(':projectB') {
dependencies {
compile project(':projectC'), {
transitive = false
}
}
}
运行 Gradle 在项目 A 的示例 class 中的 compileJava
给出了正确的错误消息。我希望这个错误应该作为 Eclipse 中的编译错误出现。我还能够以所需关系保持的方式手动配置 class 路径,但是 Gradle Refresh/Rebuild 再次重置 class 路径。
是否可以使用 Gradle 的 Java 编译器而不是 Eclipse 编译器?或者我应该在执行 Gradle Refresh/Rebuild 时影响 classpath 文件吗?是否有不同的解决方案?
我想听听这种情况的首选方法是什么。谢谢!
我能够实现这一点的唯一方法是引用项目的 class 文件,因此:
project(':projectA') {
dependencies {
compile files("../projectB/build/classes/main")
}
}
路径 ../projectB/build/classes/main
应指向 class 文件在您的项目中生成和存储的位置。
我也研究过用 Gradle 的编译器替换 Eclipse 编译器,但是 Eclipse 目前不支持。
您可以使用 gradle eclipse 插件从 gradle 修改 eclipse 项目设置,包括对 eclipse classpath 的更改。我会在 build.gradle:
中尝试这样的事情
allprojects{
apply plugin:'eclipse'
eclipse.classpath.file {
beforeMerged { classpath -> classpath.entries.removeAll{it} }
}
}
然后 运行 gradle eclipseClasspath
重新生成 .classpath 文件,然后在 eclipse 中一般刷新 / F5 来获取修改后的 .class路径文件。
演示:
我在 build.gradle 中从 transitive=true
开始。当 A 中的 class 在 C 中实例化 class 时,我没有得到编译错误。
现在我在 build.gradle 中更改为 transitive=false
这会导致命令行编译失败,但 eclipse 对旧的依赖信息很满意。 Right-Click->Gradle->Refresh Project没有效果。要让 gradle 取零钱,运行 gradle eclipseClasspath
gradle eclipseClasspath
:eclipseClasspath
:A:eclipseClasspath
:B:eclipseClasspath
:C:eclipseClasspath
并让 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 }
}
我在 Eclipse 中有一个 Gradle 项目,由多个子项目组成。我目前有子项目 A、B 和 C。
项目 A 应有权访问项目 B。项目 B 应有权访问项目 C。但项目 A 不应 有权访问项目 C。
A -> B, B -> C, but not A -> C
我可以通过在项目 A 中尝试使用项目 C 中的 class 的 java 示例 class 来轻松测试。
我已经通过 Gradle 在主 build.gradle
文件中使用以下设置并使用 transitive
属性:
project(':projectA') {
dependencies {
compile project(':projectB'), {
transitive = false
}
}
}
project(':projectB') {
dependencies {
compile project(':projectC'), {
transitive = false
}
}
}
运行 Gradle 在项目 A 的示例 class 中的 compileJava
给出了正确的错误消息。我希望这个错误应该作为 Eclipse 中的编译错误出现。我还能够以所需关系保持的方式手动配置 class 路径,但是 Gradle Refresh/Rebuild 再次重置 class 路径。
是否可以使用 Gradle 的 Java 编译器而不是 Eclipse 编译器?或者我应该在执行 Gradle Refresh/Rebuild 时影响 classpath 文件吗?是否有不同的解决方案?
我想听听这种情况的首选方法是什么。谢谢!
我能够实现这一点的唯一方法是引用项目的 class 文件,因此:
project(':projectA') {
dependencies {
compile files("../projectB/build/classes/main")
}
}
路径 ../projectB/build/classes/main
应指向 class 文件在您的项目中生成和存储的位置。
我也研究过用 Gradle 的编译器替换 Eclipse 编译器,但是 Eclipse 目前不支持。
您可以使用 gradle eclipse 插件从 gradle 修改 eclipse 项目设置,包括对 eclipse classpath 的更改。我会在 build.gradle:
中尝试这样的事情allprojects{
apply plugin:'eclipse'
eclipse.classpath.file {
beforeMerged { classpath -> classpath.entries.removeAll{it} }
}
}
然后 运行 gradle eclipseClasspath
重新生成 .classpath 文件,然后在 eclipse 中一般刷新 / F5 来获取修改后的 .class路径文件。
演示:
我在 build.gradle 中从 transitive=true
开始。当 A 中的 class 在 C 中实例化 class 时,我没有得到编译错误。
现在我在 build.gradle 中更改为 transitive=false
这会导致命令行编译失败,但 eclipse 对旧的依赖信息很满意。 Right-Click->Gradle->Refresh Project没有效果。要让 gradle 取零钱,运行 gradle eclipseClasspath
gradle eclipseClasspath
:eclipseClasspath
:A:eclipseClasspath
:B:eclipseClasspath
:C:eclipseClasspath
并让 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 }
}