所以我有一个IntelliJ IDEA项目(项目A),其中包括一堆外部JAR库.我目前正在处理其中一个外部JAR库(项目B),我想用我计算机上的本地项目(项目B)替换它.

简而言之:

这样,当我运行项目A时,它在本地使用项目B,而不是在外部使用Jar B.有谁知道做这件事有什么简单的好办法吗?

推荐答案

Using Composite Builds

您的用例正是Gradle中复合构建的目标.The docs甚至提到您的确切使用 case :

复合生成允许您[…]组合通常独立开发的版本,例如,在您的应用程序使用的库中try 错误修复时

复合构建允许您临时轻松地将外部依赖库替换为该库的本地可用构建项目.(它甚至可以处理多个不同的依赖项.)

完整的例子

下面是如何为您的两个项目设置此设置(为简明起见,省略了Gradle Wrapper个文件和Java源代码):

├── projectA
│   ├── build.gradle
│   └── settings.gradle
└── projectB
    ├── build.gradle
    └── settings.gradle

请注意,这两个项目目录实际上不必是同级目录.我这么做只是为了简单.在我的最小示例构建中,两个settings.gradle文件可能是空的.这两个构建脚本如下所示.

projecta/build.gradle

plugins {
    id 'java'
}

dependencies {
    implementation 'com.example:projectB:1.2.+'
}

repositories {
    // where you get the projectB dependency from normally
}

ProjectB/build.gradle

plugins {
    id 'java-library'
}

group = 'com.example'
version = '1.2.3'

运行示例

On the Command Line

projectA/以下,只需运行./gradlew --include-build ../projectB build(或您感兴趣的任何其他Gradle任务).确保使用到ProjectB目录的正确路径.选项自动创建飞翔上的复合构建.

In IntelliJ IDEA

还可以在IntelliJ中创建复合构建.为此:

  1. 照常导入projectA(通过其build.gradle文件确保IntelliJ自动使用Gradle配置).
  2. 在Gradle工具窗口中,单击+按钮("Link Gradle Project")并 Select ProjectB的build.gradle文件.
  3. 在Gradle工具窗口中右键单击ProjectA并 Select "复合构建配置".在打开的对话框中, Select ProjectB并单击"OK".
  4. 在Gradle工具窗口中,单击?按钮("重新加载所有Gradle项目").

就这样.您现在应该能够将ProjectA与其本地可用的依赖项ProjectB一起使用.

Java相关问答推荐

我应该避免在Android中创建类并在运行时编译它们吗?

无法传递消费者<;>;实例

确定Java中Math.Ranb()输出的上限

';com.itextpdf.ext.html.WebColors已弃用

存根基类的受保护方法

DTO到实体,反之亦然,控制器和服务之间的哪一层应该处理转换?

连接Quarkus中的两个异步操作

Spark上下文在向Spark提交数据集时具有内容,但Spark在实际构建它时发现它为空

这是什么Java构造`(InputStream Is)->;()->;{}`

格式中的特定回录键-值对

如何从日期中截取时间并将其传递给组件?

try 将JSON字符串响应从API转换为映射字符串、对象>;时出错

为什么Collectors.toList()不能保证易变性

为什么StandardOpenOption.CREATE不能通过Ubuntu在中小企业上运行?

如何在Java springboot中从一个端点发送多个时间响应?

Java.time.OffsetDateTime的SQL Server数据库列类型是什么?

如何在Maven Central上部署?

设置背景时缺少Android编辑文本下划线

如何用Micrometer&;斯普肯

using case default on switch语句返回;预览特征切换中的模式匹配仅在源级别20及以上的情况下可用;