【问题标题】:How to use Gradle to build a JAR that depends on another JAR如何使用 Gradle 构建依赖于另一个 JAR 的 JAR
【发布时间】:2014-11-05 10:04:31
【问题描述】:

我有一个 Eclipse 工作区,其中声明的工作集配置为具有多个项目。一些用于生成 JAR 文件,而另一些则是使用这些 JAR 文件的 Web 应用程序。在我的架构中,我有一个 JAR 将由域核心服务和另一个依赖于第一个将包含更高级别服务的 JAR 组成。最后,我将创建一些使用这两个 JAR 的 Web 应用程序。

第一个 JAR 项目是使用 Gradle 构建的,基于以下脚本

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'application'

repositories {
    mavenLocal()
    mavenCentral();
}

jar {
    baseName = 'br.ufpr.unidades.dominio'
    version = '0.1.0'
}

dependencies {
    compile 'org.hibernate:hibernate-core:4.3.7.Final'
}

task wrapper(type: Wrapper) {
    gradleVersion = '1.11'
}

任何人都可以看到,这是一个非常简单的build.gradle 文件,并且构建工作正常。预期的 JAR 文件在预期的目标文件夹中生成。

现在,第二个 JAR 的构建脚本来了:

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'application'

repositories {
    mavenLocal()
    mavenCentral()
}

jar {
    baseName = 'br.ufpr.unidades.dominio.hibernate'
    version = '0.1.0'
}

dependencies {
    runtime fileTree(dir: '../dominio/build/libs', include: '*.jar')
    compile 'org.hibernate:hibernate-core:4.3.7.Final'
}

task wrapper(type: Wrapper) {
    gradleVersion = '1.11'
}

第二个文件与第一个非常相似,只是它依赖于生成的 JAR:

    runtime fileTree(dir: '../dominio/build/libs', include: '*.jar')

Eclipse 没有显示任何问题,但是当我尝试构建第二个 JAR 项目时,我收到许多 Class not found 错误消息,如下所示:

[sts] -----------------------------------------------------
[sts] Starting Gradle build for the following tasks: 
[sts]      build
[sts] -----------------------------------------------------
:compileJava
D:\Users\alex\Documents\Eclipse\workspace\unidades\dominio.hibernate\src\main\java\dominio\hibernate\HibernateCargoRepository.java:7: error: package unidades.dominio does not exist
import unidades.dominio.Cargo;

消息很明确:我正在导入一个在构建期间未找到的包,因此无法在我的代码中引用此类包。这样的包是在第一个完美生成的 JAR 文件中声明的。它在 Eclipse 项目中的 Referenced Libraries 项下也可见,因此 Gradle 能够找到它以在设计时引用它,但不能构建第二个 JAR。

毕竟,我怀疑这是一个依赖管理问题,但我看不出它是什么以及如何解决它。

提前致谢!

【问题讨论】:

  • 您是否在第二个项目中使用dominio/build/libs 下的jar 中的类?如果是这样,这应该是一个compile 依赖项。我还建议设置一个多模块 gradle 项目。
  • @Opal:嗯,这就是与专家交谈的好处!非常感谢,您的建议解决了问题!请将其添加为答案,我会将其标记为解决方案!

标签: java eclipse jar gradle build.gradle


【解决方案1】:

您是否在第二个项目中使用dominio/build/libs 下的jar 中的类?如果是这样,这应该是一个compile 依赖项。我还建议设置一个multimodule gradle 项目。 Here 是文档。

【讨论】:

    猜你喜欢
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 2020-08-27
    • 2012-12-28
    • 2019-04-05
    相关资源
    最近更新 更多