gpt4 book ai didi

java - 如何通过 gradle 打包 REST 客户端代码以供多项目使用

转载 作者:行者123 更新时间:2023-12-03 06:20:10 25 4
gpt4 key购买 nike

背景:

在项目 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com