当前位置: 首页 > 知识库问答 >
问题:

如何在多项目grails/gradle构建中包含依赖jar?

颜昕
2023-03-14

我的项目中有以下设置...

  • 用于SOA风格项目的多项目gradle构建,使用Rabbitmq和Spring集成连接在一起。
  • 包含许多grails项目以及表示服务的普通java/groovy项目。
  • 每个服务项目旁边都有一个项目(jar),其中包含可以使用Spring集成代理的服务的所有公共接口(和消息)。
  • 这些项目使用gradle依赖关系相互关联,然后我使用gradle想法插件生成IntelliJ项目文件。

我想做的是:

  • 在圣杯项目中包含接口 jar,以便我可以使用那里的Spring集成,通过 rabbitmq 将我的调用代理到服务中。
  • 当我运行圣杯应用程序时,会构建此内含物罐并包含在圣杯中。
  • 当我从IntelliJ运行圣杯应用程序时,让它编译最新版本的接口并将它们包含在圣杯项目中。
  • 当我从 gradle 构建整个项目时,让 gradle 正确地将接口 jar 与圣杯应用程序相关联。
  • 理想情况下,我希望能够在gradle中使用依赖关系声明来做到这一点,但这可能是一个白日梦......

我有什么选择?

  1. 在 gradle 内将任务添加到圣杯构建生命周期中以构建任何依赖的 jar 并将其复制到 grails lib 文件夹中?
  2. 通过使用 Events.groovy 或类似的东西来调用圣杯来构建和打包附属罐子,从而挂入圣杯构建生命周期。这将涵盖智能和命令行路由。
  3. 接口构建为圣杯插件?我对此打了折扣,因为它们也需要从非圣杯项目中使用。

任何帮助/建议都将不胜感激。

共有3个答案

薛欣荣
2023-03-14

我目前的解决方案是:

  • 使用grails/gradle插件构建grails项目
  • 使用此插件运行我的grails应用程序,即gradle grails run app
  • 挂接到gradle中的grails-run-app任务(动态创建),以调用一个构建依赖项并将其复制到lib目录中的任务

目前,这对IntelliJ的整个负载没有帮助,但我将在IntelliJ运行配置时运行我的分级任务。

我的build.gradle如下(在这个例子中,dependent-project被放入lib):

import org.grails.gradle.plugin.GrailsTask

evaluationDependsOn(':dependent-project')

buildscript {
    repositories {
        mavenCentral()
        mavenRepo name: "grails", url: 'http://repo.grails.org/grails/repo'
    }
    dependencies {
        classpath "org.grails:grails-gradle-plugin:1.1.1-SNAPSHOT"
    }
}

repositories {
    mavenCentral()
    mavenRepo name: "grails", url: 'http://repo.grails.org/grails/repo'
}

ext {
    version = "1.0"
    grailsVersion = "2.2.0.RC2"
    grailsTaskPrefix = "grails-"
}

apply plugin: "grails"

dependencies {
    ['dependencies', 'resources', 'core', 'test', 'hibernate', 'plugin-datasource', 'plugin-domain-class', 'plugin-tomcat', 'plugin-services'].each { plugin ->
        compile "org.grails:grails-$plugin:2.2.0.RC2"
    }
    bootstrap "org.codehaus.groovy:groovy-all:2.0.5"
}

// Get hold of the grails-run-app task (which is created on the fly) and add a dependency to the copyDependencies task
project.gradle.afterProject { p, ex ->
    if (p == project) {
        project.tasks.addRule("Grails dependencies") { String name ->
            if (name.startsWith(grailsTaskPrefix)) {
                tasks.getByName(name).dependsOn(copyDependencies)
            }
        }
    }
}

// Build and copy any dependent jar files...
task copyDependencies(type: Sync) {
    from project(':dependent-project').configurations.archives.allArtifacts.files
    into "$projectDir/lib"
}
欧阳鸿哲
2023-03-14

这个问题的部分解决方案是同时使用格拉德和圣杯专家插件。我有类似的情况,我正在构建作为圣杯项目依赖项的罐子。

我选择的方法是将java工件安装到local.m2/repo中,然后在grails/conf/BuildConfig下声明依赖项。groovy使用mavenLocal()repo。

我没有考虑过的是将gradle挂接到事件生命周期中(有趣的想法,顺便说一句),而是定义了一个包装圣杯应用程序的gradle项目(执行测试应用程序,运行应用程序等)。我的grails应用程序的gradle包装器依赖于其他组件的安装任务,因此它始终检查是否需要重建。

我是Eclipse用户,所以我不能评论你问题的Intellij部分,但上述内容对我有用,所以我希望它能给你一些想法?

景星华
2023-03-14

结果我所需要做的就是添加以下内容,然后grails插件为我处理依赖项。。。

compile project(':dependent-project')

适用于运行应用程序和战争...

 类似资料:
  • 我将给你一个关于我的文件的概述: 设置。分级: Build.Gradle: 注意:我以为没有将依赖项添加到类路径中,但我不确定这一点。但是,我希望Intellij将依赖项添加到类路径中(或者在清单文件中声明) 但是,这会创建一个zip/tar,其中包含一个执行脚本和一个bin文件夹,这不是我的本意。 所以我开始在谷歌上搜索了好几个小时,但我找不到解决问题的方法。

  • 我们正在尝试使用java webstart开发一个打印应用程序。我们使用eclipse将jar创建为普通jar文件。我们的应用程序需要外部库来连接数据库、将数据转换为字节等。 我们以前可以通过将必要的JAR放入jre文件夹的/ext/目录来实现这一点。然而,这导致了与tomcat服务器的库冲突,所以我们希望避免这种方法。 我们还尝试将项目导出为可运行的jar,因为所需的库也已打包在jar中。但是当

  • 像这样的问题有很多,但是似乎没有一个对我有效或者直接回答我的问题。 我正在使用Jhipster和MongoDB Atlas。Jhipster使用一个名为Mongobee的库,其中使用了一个适用于MongoDB的方法,但不适用于MongoDB Atlas。要启动,Mongobee似乎不再维护。 因此,我找到了某人的建议PR,他们将其发送给Mongobee进行审查,我接受了代码更改,将MongoBe分

  • 我有一个jar,build-plugins.jar和一个gradle插件,它是用build.gradle中的这个插件构建的: 这将构建build-plugins.jar。并且使用插件的项目按文件引用插件jar 问题是当我运行第二个项目的任何任务时,我得到的是“class proxy created for class XYZ”,根本原因是四个依赖项(joda-time、commons-io、str

  • 项目中./gradlew build命令产生的jar包没有将build.gradle.kts中的dependencies的依赖包打进去,使用包时提示Package 'xxx.x' is not found ,如何解决呢? 希望:如何解决这个Package 'xxx.x' is not found问题,以及如何指定打的jar包的名称和版本

  • 我有一个包含多个子项目的根项目。最初,我们将这些项目作为独立的Maven项目保留,但我意识到Gradle更适合我使用。但是对于其中一个子项目,我们宁可不将其转换为Gradle项目,而将其保留为Maven项目。 root/build.gradle root/common.gradle root/api/pom.xml