【发布时间】:2018-04-11 16:33:30
【问题描述】:
我希望能够让 Eclipse 忽略一个 Gradle 项目,而是使用它的预构建版本。
背景
我有一个用 Scala 编写的“解析器”项目,还有十几个用 Java 编写的项目。我的工具集中最薄弱的环节是 Scala IDE。我使用这个插件来编辑和编译 Scala 代码,但不幸的是,它在混合语言项目中严重破坏了 Java (JDT) 工具*。
- 特别是:调用层次结构缺少结果、搜索崩溃等。此外,Scala IDE 似乎已经失去了资金,而且这些问题听起来相当根本,所以我不会屏息等待这些问题得到解决。
对于 Maven (m2e),我有一个非常满意的解决方法:
-
构建为
.jar放入我的本地 .m2 存储库:cd parser; mvn install 在 Eclipse 中,关闭“解析器”项目
“像魔法一样”,m2e 只是拿起了最近“安装”的 .jar 并使用它来代替已关闭的项目。
一个很棒的答案是如何让 Gradle 做到这一点!
但我所希望的只是满足这些要求的任何解决方案......
要求
- 我可以在必要时打开项目
parser(很少), 通过 Gradle 命令行编辑和构建更改。 完成后我会关闭它。 - 其他项目使用我本地 .m2 存储库中构建的 .jar。 (如果他们总是这样做就好了。)
- 更改不得影响不使用 Eclipse 的其他人
- (理想情况下)其他 Eclipse 用户可以使用更改
方法
@lance-java 的good answer 提出了一个类似的问题,并提出了一些一般性建议。我认为我可以排除这些想法:
- composite build support / 多个回购。其他团队成员认为单独构建这个项目没有意义,因为它与其他团队非常紧密地集成在一起。
- dependency substitution rules - 似乎不符合要求 3。
与 lance-java 的想法 #4 类似的东西听起来是可行的。转述……
-
“使用eclipse plugin [结合] Buildship,例如使用whenMerged 挂钩来调整生成的
.classpath[所有Java项目 ]。”更新:[4 月 18 日]:我在这种方法中使用了 hit a brick wall。 Buildship 没有将构建的 .jar 放到运行时类路径中。 (更新 2:现已解决 - 请参阅我的答案。)
问题
主要问题:我如何构建一个解决方案,它实际上会起作用并避免任何重大缺陷?
请注意,项目本身有一些依赖项,具体来说:
dependencies {
compile 'org.scala-lang:scala-library:2.12.4'
compileOnly 'com.google.code.findbugs:jsr305:1.3.9'
antlr 'org.antlr:antlr4:4.5.3'
}
所以一个子问题可能是:如何在不重复定义的情况下将它们引入其他项目? (如果这不能自动工作。)
【问题讨论】:
-
为了清楚起见,您永远不会将
parser用作项目依赖项,仅作为常规依赖项,在本地 .m2 存储库中挑选? -
没错,我想删除对项目
parser(Gradle默认添加)的引用,并将其替换为parser-1.0.0-SNAPSHOT.jar之类的东西。 -
更新:我刚刚发现一个big clue 试图从 .m2 目录中包含 .jars 可能有问题。也许我必须避免
maven-publish和/或将 jar 复制到其他地方。 -
我明天会尝试一个正确的答案,但我认为它并不复杂(如果我理解正确的话)
标签: java gradle scala-ide gradle-eclipse