从Eclipse启动Gradle构建

时间:2011-06-22 15:40:12

标签: eclipse gradle

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

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

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

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

12 个答案:

答案 0 :(得分:26)

这是一篇很老的帖子,但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生成正确的war文件存在一些问题,但gradle本身就做得非常好。我对gradle和插件相对较新,所以它可能是我缺少的东西。

答案 1 :(得分:23)

临时工作对于那些有命令行恐惧症的人来说更加可口。

从Eclipse中,使用下拉菜单运行/外部工具/外部工具配置...

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

选择主要标签后,请填写以下字段:

  1. 名称:(在标签上方)为“Gradle”(或任何您想要用于启动器的名称)。
  2. 位置:使用“浏览文件系统...”按钮导航到“gradle.bat”或“gradlew.bat”运行。
  3. 工作目录:使用“浏览工作区...”按钮选择包含所需项目的“build.gradle”文件的目录。
  4. 参数:输入“--gui”
  5. 添加到参数:如果使用“build.gradle”以外的Gradle构建文件,则切换“-b filename.gradle”。

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

答案 2 :(得分:15)

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

我相信this site概述了此项工作目前的工作情况,而且现在似乎并不多。

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

答案 3 :(得分:10)

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

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

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

编辑2017-03-01: 在Buildship 2.0发布之后,集成甚至更好,我推荐它(除非你已经使用IntelliJ,然后你已经设置)。 仍有一些功能缺失,例如直接调试JavaExec任务的能力以及运行预编译/预先导入任务的能力,但这些功能都在他们的Github issues list中。

答案 4 :(得分:8)

我知道这是一个老问题,但我仍然认为让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>

答案 5 :(得分:5)

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

答案 6 :(得分:2)

您可以使用Gradle Eclipse plugin之类gradle eclipse从gradle项目生成Eclipse项目。它为生成的Eclipse项目添加了许多目标,并且可以高度自定义。

答案 7 :(得分:2)

与以往一样,您最好使用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/

答案 8 :(得分:2)

您可以使用FkYkko所述的Buildship。但是,要记住的一件事是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.
}

有关详细信息,请参阅thisthis

答案 9 :(得分:1)

还有Enide Gradle http://www.nodeclipse.org/projects/gradle
可与Pivotal使用或不使用Gradle IDE一起使用 在Gradle,Maven或CDT(C ++)项目中。

run

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

这个Gradle IDE Pack在Enide

之内

答案 10 :(得分:1)

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

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

  

使用Gradle Tasks视图

     

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

     

enter image description here

     

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

Source

答案 11 :(得分:1)

2016年的另一个新项目是EGradle

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

同样不要求Project具有特殊性质,只需现有的namespace Bouncinglabels { using System.Windows.Forms; class LabelBouncer { public Label MyLabel; public bool GoingForward = true; public void Move() { if (MyLabel != null) { if (GoingForward) { MyLabel.Left += 5; } else { MyLabel.Left -= 5; if (MyLabel.Left <= 0) { GoingForward = true; } } if (MyLabel.Right >= MyLabel.Parent.Width) { GoingForward = false; } } } } } 即可。

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