如何使用Gradle构建依赖于另一个JAR的JAR

时间:2014-11-05 10:04:32

标签: java eclipse jar gradle build.gradle

我有一个Eclipse工作区,其中声明的工作集配置为包含多个项目。一些是生成JAR文件,另一些是使用这些JAR文件的Web应用程序。在我的架构中,我有一个由域核心服务组成的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。

毕竟,我怀疑这是一个依赖管理问题,但我不知道它是什么以及如何修复它。

提前致谢!

1 个答案:

答案 0 :(得分:1)

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