从 Eclipse 启动 Gradle 构建

Posted

技术标签:

【中文标题】从 Eclipse 启动 Gradle 构建【英文标题】:Launching Gradle builds from Eclipse 【发布时间】:2011-09-20 12:29:25 【问题描述】:

我们正在考虑将我们的 Ant 构建转换为 Gradle。

关于与 Eclipse 的集成,我们正在寻找(在概念上)从 IDE 启动构建的等效功能。 Eclipse 为调用 Ant 目标提供了一个很好的 Ant 视图。

有一个用于启动 Gradle 构建的 Eclipse 插件(http://www.breskeby.com/downloads/gradle/eclipse/update/),但这似乎需要用户跳过箍来调用不同的目标(编辑启动配置等)。

其他人如何在 Eclipse 中使用 Gradle?

【问题讨论】:

这就是我的做法:github.com/djangofan/WebDriverTestingTemplate 【参考方案1】:

这是一个老帖子,但是 SpringSource STS 团队已经发布了一个插件:http://static.springsource.org/sts/docs/latest/reference/html/gradle/

安装说明可以在这里找到:http://static.springsource.org/sts/docs/latest/reference/html/gradle/installation.html

到目前为止,我的经验非常积极。对于直接的 Java 项目,它工作得很好。我在使用 Gradle 插件时通过 Eclipse 生成正确的战争文件时遇到了一些问题,但 gradle 本身做得很好。不过,我对 gradle 和插件还比较陌生,所以它可能是我缺少的东西。

【讨论】:

在 Eclipse Juno 中安装 Spring Gradle Tooling 插件非常容易。只需将常规的 Juno 软件仓库添加到您的安装源中,安装“市场”应用程序,重新启动 Eclipse,然后使用市场应用程序安装 Gradle 和/或 Groovy。 附带说明一下,我在过去一年左右一直在使用 IntelliJ,Gradle 集成非常棒!! 就个人而言,我认为 IntelliJ 的“run-as”对话在 Gradle 方面更难理解。我很难解释,但我认为 Eclipse 在这方面要容易得多。 @djangofan 听听您对 IntelliJ 13 的体验会很有趣 - 带有大大改进的 gradle 集成。我不能回到 Eclipse :P 我明白。无论如何,Eclipse Gradle 插件仍然基于 Gradle 1.6。【参考方案2】:

临时解决方法更适合那些有命令行恐惧症的人。

在 Eclipse 中,使用下拉菜单 Run / External Tools / External Tools Configurations...

在左侧导航面板中选择“程序”,然后单击工具栏中的“新启动配置”按钮(我的工具栏中的第一个按钮)。

选择主选项卡后,填写以下字段:

    名称:(在选项卡上方)到“Gradle”(或您想要的启动器名称)。 位置:使用“浏览文件系统...”按钮导航到“gradle.bat”或“gradlew.bat”以运行。 工作目录:使用“浏览工作区...”按钮为所需项目选择包含“build.gradle”文件的目录。 参数:输入“--gui”

添加到参数:如果您使用“build.gradle”以外的 Gradle 构建文件,则使用开关“-b filename.gradle”。

在此之后,您的开发人员可以使用运行/外部工具或工具栏按钮来启动 Gradle Gui。他们可以这样做并在每次使用后将其关闭,或者(为了避免启动延迟)在不使用时将其最小化。

【讨论】:

这也是一个完全可以接受的解决方案,也是在没有明确支持的情况下从 Eclipse 运行外部工具的一般方式。不过,我仍然看不到 OP 从单独的终端运行命令有什么问题。无论如何,它的速度更快。 同意全能:我根本不认为这是一种“临时解决方法”。请注意,您可以简单地调用 gradle(或 gradlew)传递“build”或“run”,而不是在 gui 模式下运行。您可以在“外部工具”下拉菜单中显示这些运行配置中的任何一个,以便快速访问。 同意上述cmets...构建工具的全部意义在于将有时非常复杂的任务尽可能地减少为一两个简单的命令,例如“gradle build”或“gradle testCompile”之类的!可以说,如果您的 gradle 命令很长,带有很多参数和开关,并且您不断重复它,尽管 Linux 终端和 Windows DOS 都是这种情况,重复命令很简单,您可能应该找到一个简单的不必输入长命令的 CLI 方式(例如新任务或 gradle.properties)【参考方案3】:

简短的回答是我们不从 Eclipse 调用 gradle 脚本。

我相信this site 概述了这项工作目前的位置,而现在似乎并不多。

我有点好奇你想从 Eclipse 运行什么样的任务。为什么不从命令行运行任务?

【讨论】:

同意,该插件似乎已停止。我们的开发团队习惯于从 Eclipse Ant Viewer 调用各种 Ant 目标(清理、构建、部署、单元测试等),我们的目标是在概念上无缝过渡到 Gradle。由于开发是在 Windows 机器上进行的,因此没有太多的命令提示符可言... @csl:我们团队的大部分人也是在 windows 上开发的,在命令提示符下使用 gradle 没有问题。我建议你把这个“要求”放低。由于这个原因,我不想看到有人没有从 ant 过渡到 gradle。所有这些功能总有一天会出现,如果你有机会,你现在应该做出改变:) 您好,我是您提到的链接中列出的实验性 Gradle 插件的作者。你是对的,我已经停止在这个 Eclipse 插件上投入时间,因为 springsource sts 的人开始研究一个插件。 sts 2.7.2 有很好的 gradle 支持。我的插件的功能在 sts 插件中完全可用。但是 sts gradle 插件的功能远远不止这些。实际上,我正在与他们联手为 gradle 文件获得更好的编辑器支持。此编辑器支持基于 groovy-eclipse 插件的新 DSLD 功能。 想要使用 Eclipse 中的 gradle 有很多原因。我认为正确的问题是为什么要转到单独的命令窗口来调用 Gradle。使用我当前的 Ant 设置,我可以使用热键自动运行我的最后一个 Ant Target,这非常方便 上下文切换是破坏性的,因此很糟糕。如果您已经在命令行中,那很好。就个人而言,我在 Eclipse 中开发,我希望能够直接从 Eclipse 构建。如果这不受支持,那么我最好使用不会因为我认为是基本操作而迫使我退出 Eclipse 的工具。【参考方案4】:

这个问题的当前答案应该是, 使用 Gradle 自带的 Eclipse 插件Buildship

http://projects.eclipse.org/projects/tools.buildship

这是 Gradle 团队支持和开发的,未来会不断改进。它还可以处理旧版本(具有基于 Gradle 版本可用性的功能)。

编辑 2017-03-01: Buildship 2.0 发布后,集成效果更好,我推荐它(除非您已经在使用 IntelliJ,否则您已经设置好了)。 仍然缺少一些功能,例如直接调试 JavaExec 任务的能力和运行预编译/预导入任务的能力,但这些在他们的 Github issues list 中。

【讨论】:

【参考方案5】:

我知道这是一个老问题,但我仍然认为不可能让 Eclipse 为您运行 gradle 构建。 Spring Gradle 插件是一个很好的开始,如果您使用它,您可以定义一个外部工具构建器来在需要时运行 gradle。如果你有很多项目并且都是用 gradle 构建的,你甚至可以让 gradle 为你的 eclipse 项目添加这个功能。虽然这可以清理,但您可以将类似这样的内容添加到您的 gradle 构建文件中:

apply plugin: 'eclipse'

eclipse 
    project 
        // Store a copy of the desired Gradle_Builder.launch file in a top-level 'master'
        //    directory.  Then this code searches for it, and by copying it, 
        //    adds the launch file to the specifc project that will run gradle
        String launchFileNameOrig = '.externalToolBuilders/Gradle_Builder.launch'
        String launchFileName = launchFileNameOrig
        File launchFile = file(launchFileName)
        boolean needToCopy = false
        while (!launchFile.exists()) 
            launchFileName = '../' + launchFileName
            launchFile = file(launchFileName)
            needToCopy = true
        
        if (needToCopy) 
             copy 
                from (launchFile)
                into '.externalToolBuilders'
            
        

        buildCommand 'org.eclipse.ui.externaltools.ExternalToolBuilder', LaunchConfigHandle: '<project>/'+launchFileNameOrig
        file 
            // when they made the "buildCommand" it looks like they left off 'triggers', so parse the XML until
            // the right place is found, then insert it.
            withXml 
                def projectNode = it.asNode()
                projectNode.iterator().each  subNode ->
                    String subNodeText = '' + subNode
                    if (subNodeText.startsWith('buildSpec')) 
                        subNode.iterator().each  buildCmd ->
                            String nameNode = buildCmd?.name
                            if (nameNode.contains('ExternalToolBuilder')) 
                                buildCmd.appendNode('triggers', 'full')
                            
                        
                    
                
            
        
    

这是存储在目录层次结构顶部的文件的内容:./.externalToolBuilders/Gradle_Builder.launch。正如这里所定义的,这只会在“干净”之后运行[Gradle 在时间上比本地 Java Builder 更昂贵,所以继续使用它进行自动构建]。注意:下面的文件内容还假设您使用的是“git”和 gradle 包装器。您可以在 ATTR_LOCATION 值上看到这一点。根据需要进行调整。不过,这种方法的一个好处是,您可以让 gradle 包装器成为您想要的任何 gradle 版本,然后 eclipse 在运行时将使用该版本!

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.ui.externaltools.ProgramBuilderLaunchConfigurationType">
<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="$workspace"/>
<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="$git_dir/../gradlew"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="assemble"/>
<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="$project_loc"/>
</launchConfiguration>

【讨论】:

【参考方案6】:

您可以从 Eclipse 创建一个自定义启动器,它会调用您的 Gradle 构建。

【讨论】:

【参考方案7】:

与以往一样,IDEA 会让您过得更好。 自 2009 年以来一直提供支持http://blogs.jetbrains.com/idea/2009/08/gradle-support/

现在可以通过 EAP 获得更全面的支持(免费使用!) http://blogs.jetbrains.com/idea/2011/09/keen-to-try-gradle-integration-in-intellij-idea/

【讨论】:

你是对的。我希望我的团队没有迟钝并使用 IDEA。但他们还是坚持使用 Eclipse。【参考方案8】:

您可以像gradle eclipse 一样使用Gradle Eclipse plugin 从gradle 项目生成Eclipse 项目。它为生成的 Eclipse 项目添加了很多目标,并且是高度可定制的。

【讨论】:

谢谢,但问题是关于从 Eclipse 调用 Gradle - 不生成 Eclipse 项目。【参考方案9】:

您可以使用Buildship,如 FkYkko 所述。但是,要记住的一件事是,Ant 任务在 gradle 中被视为一等公民。这意味着您可以简单地导入一个 ant 构建脚本,以与引用 gradle 任务相同的方式引用其任务。以这种方式做事可以让您简单地使用 gradle 开箱即用的 ant 任务,而无需将它们转换为 gradle 任务。

例如,假设您在 build.gradle 所在的目录中有一个名为 build.xml 的构建脚本,并且 build.xml 中有一个名为 buildProj 的任务。你可以导入 build.xml,然后像这样从 build.gradle 调用 build proj:

task antDeps 
    ant.importBuild 'build.xml'


task buildAll (dependsOn:['buildProj']) 
    // the rest of your gradle task here.

请参阅this 或this 了解更多信息。

【讨论】:

【参考方案10】:

还有 Enide Gradle http://www.nodeclipse.org/projects/gradle Pivotal 可以在有或没有 Gradle IDE 的情况下使用。 在 Gradle、Maven 或 CDT(C++) 项目中。

作为单独的插件,它可以有不同的配置供 Gradle 版本和 Java 版本使用

这个,Gradle IDE Pack 在Enide内

【讨论】:

【参考方案11】:

我在安装更新的 Buildship 插件后遇到了这个问题,该插件正在逐步淘汰其他人提到的 Spring Tool Suite。

在 Buildship 中使用任务视图的说明如下:

使用 Gradle 任务视图

成功导入Gradle项目后,项目显示在 Gradle 任务视图。 通过在 Gradle Tasks 视图中右键单击某个 Gradle 任务,您可以运行选定的 Gradle 任务。

默认情况下,结果显示在 Gradle Executions 视图中。它 也显示在控制台视图中,类似于您想要的输出 如果您通过命令行运行任务,则获取。

Source

【讨论】:

【参考方案12】:

2016 年还有一个新项目是 Egradle

https://github.com/de-jcup/egradle

也不需要项目具有特定性质,只要现有的build.gradle 就足够了。

用户指南在内置帮助中 (F1) 或在https://rawgit.com/de-jcup/egradle/master/egradle-plugin-main/html/user_guide.html预览

【讨论】:

以上是关于从 Eclipse 启动 Gradle 构建的主要内容,如果未能解决你的问题,请参考以下文章

Gradle 找到了资源文件,但 Eclipse 没有找到 [重复]

配置现有的 eclipse java 项目以使用 gradle 构建

选择 Android 库的构建变体的 Gradle 脚本

[Gradle] 在 Eclipse 下利用 gradle 构建系统

如何在 Eclipse 下用 Gradle 构建 Web Application

使用最新插件启动eclipse RCP应用程序时出错(Eclipse 4.8)