背景:
在项目 Alpha 需要在项目 Beta 中使用 REST 端点的多项目(比如 Alpha 和 Beta)Java/Spring4.x 环境中。项目 Alpha 和 Beta 非常相关,并且将始终一起发布。但是,它们也需要分开,因为代码将被构建到不同的部分中,这些部分将在不同的物理机器上执行——因此首先是 REST 实现!
附带一点:UI 代码在其他项目中,通常是各种 REST 端点的使用者,因此不需要使用 REST 客户端的 Java 实现。 REST 客户端通常是 src/main/test,因此它们甚至没有被打包,通常它们只是为单元测试创建的。
规范:
给定的 API 在 Project Beta 中通过接口(interface)类定义:
// located in /src/main/java/com/mycompany/myservice/api
public interface MyServiceApi {
String getDataMethod();
}
Java REST Client 目前也处于 Project Beta 中(需要上面的 API):
// currently located in /src/main/client/com/mycompany/myservice/client
public class MyServiceRestClient implements MyServiceApi {
. . .
}
问题:
抱歉花了这么长时间才到这里!两个项目都在同一个 settings.gradle 文件中定义——它们是一起构建的。每个项目也有自己的 build.gradle 文件。问题是如何仅打包客户端 REST 工件,然后如何在 Project Alpha 中引用它们?理想情况下,答案既可以从 gradle 命令行也可以在 Eclipse 中使用。显然,在 Project Alpha 的 build.gradle 中使用它:
dependencies {
compile project('beta')
}
不起作用,因为这会带来所有项目 Beta。通过将客户端 Java 代码放入 src/main/client,我一直假设 Project Beta 将需要定义一个 sourceSet 来处理此代码。我怎么拿,把它打包成一个 jar (我知道怎么做这部分),最重要的是 ,引用来自 Project Alpha 的 Jar 都在同一个、单个多项目 gradle 构建中?还是有更好的方法来做到这一点,这是一种完全不同的方法?
最佳答案
我想我刚刚找到了答案——我不知道在定义“项目”依赖项时,您可以通过包含特定配置来进行优化!
所以我想我可以在 Alpha 中做这样的事情(其中 Beta 定义了引用的配置):
dependencies {
compile project('Beta') {
configuration = 'RESTclient'
}
}
我现在正在对此进行测试,如果它正常工作,我将编辑这个答案。
更新
如果您需要,上述方法可以正常工作。我需要一些不同的东西。 Project Beta 提供了 Project Alpha 所需的 REST 客户端。首先,我将它打包到 Project beta 中的“客户端”jar 文件中:
clientJar {
// ensure the client jar file is relatively self-contained, so add API class
// Note: this is additive, so the client configuration class files are already in the jar
from sourceSets.main.output.asFileTree.matching {
include 'com/mycompany/package/path/api/**'
}
}
然后在 Project Alpha 中有两个选择。首先直接使用 Project Beta 中的客户端类文件:
jar {
from project(':Beta').sourceSets.client.output.classesDir
. . .
}
或者,Alpha 中的另一个选项是引用创建的 Jar 文件:
dependencies {
. . .
compile "com.mycompany.project.path:beta:${version}:client"
}
YMMV,但通常我更喜欢后一种方法。
关于java - 如何通过 gradle 打包 REST 客户端代码以供多项目使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26382845/