gradle.settings多行语法

时间:2017-04-19 11:25:07

标签: gradle groovy

我在include中有很长的settings.gradle

include 'project-subproj1', 'project-subproj2', 'project-subproj3', 'project-subproj4'

settings.gradle中分割长行的正确语法是什么?

我想:

include 'project-subproj1', \
        'project-subproj2', \
        'project-subproj3', \
        'project-subproj4'

但似乎

include 'project-subproj1',
        'project-subproj2',
        'project-subproj3',
        'project-subproj4'

也有效。

settings.gradle是一个常规的Groovy脚本吗?

3 个答案:

答案 0 :(得分:4)

settings.gradle是一个常规的Groovy脚本吗?
是的,是的。

只是解释一下, Gradle 读取settings.gradle文件,它实际上创建了一个Setting类的实例。

如果您在Setting类上看到include方法规范,就像这样:

void include(java.lang.String[] strings);

因此该方法接受String类的数组作为参数。在groovy中,您可以通过不同的方式调用此方法:

include "project1", "project2"

include "project1",  
    "project2"

include (['project1',
    'project2'] as String[])

include ('project1',
     'project2')

答案 1 :(得分:2)

是的,在Gradle中,以@model ValueVille.Models.AdminOrdersViewModel @{ ViewBag.Title = "Orders"; } <script src="/Scripts/jquery-3.1.1.min.js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function () { $("#Order-Update-Button").click(function () { var ListOfUpdatedOrders = [] @{ foreach (var item in Model.OrdersInProgress) { @:ListOfUpdatedOrders.push({ id: "@item.OrderId", newStatus: document.getElementById("@item.OrderId") }); } } var dataJson = JSON.stringify({ "UpdatedOrdersList": ListOfUpdatedOrders }); alert("running"); // Perform the ajax post $.ajax({ contentType: "application/json; charset=utf-8", type: "POST", url: "@Url.Action("UpdateOrders", "Manage")", data: dataJson, dataType: "json", success: function (data) { alert(data); }, error: function () { alert("an error has occured!!!"); } }); }); }); </script> <div class="main-content-container"> <h1>New Orders In Progress<span id="update-order-test"></span></h1> @Html.AntiForgeryToken() <table class="panel panel-default table cart-table"> <tr> <th> Order ID </th> <th> Total </th> <th> Date </th> <th> Status </th> </tr> @foreach (var item in Model.OrdersInProgress) { <tr> <td> <a href="@Url.Action("OrderDetails", "Home", new { id = item.OrderId })"> @item.OrderId @Html.HiddenFor(x => item.OrderId) </a> </td> <td> £@item.Total @Html.HiddenFor(x => item.Total) </td> <td> @item.OrderDate @Html.HiddenFor(x => item.OrderDate) </td> <td> @Html.DropDownListFor(m => item.Status, new SelectList(Model.OrderStatuses, "StatusId", "StatusName"), new { @id=item.OrderId }) </td> </tr> } </table> <h1>Orders Despatched</h1> <table class="panel panel-default table cart-table"> <tr> <th> Order ID </th> <th> Total </th> <th> Date </th> <th> Status </th> </tr> @foreach (var item in Model.OrdersDespatched) { <tr> <td> <a href="@Url.Action("OrderDetails", "Home", new { id = item.OrderId })"> @item.OrderId @Html.HiddenFor(x => item.OrderId) </a> </td> <td> £@item.Total @Html.HiddenFor(x => item.Total) </td> <td> @item.OrderDate @Html.HiddenFor(x => item.OrderDate) </td> <td> @Html.DropDownListFor(m => item.Status, new SelectList(Model.OrderStatuses, "Id", "StatusName")) </td> </tr> } </table> <div class="panel-body form-group"> <div class="col-md-offset-2 col-md-10"> <input id="Order-Update-Button" type="submit" value="Update" class="btn btn-success" /> </div> </div> </div> 结尾的每个文件都是一个常规的Groovy脚本。 Gradle中的未脚本文件由其他文件扩展名指示(例如AdminOrders:60 Uncaught TypeError: Converting circular structure to JSON at JSON.stringify (<anonymous>) at HTMLInputElement.<anonymous> (AdminOrders:60) at HTMLInputElement.dispatch (jquery-3.1.1.js:5201) at HTMLInputElement.elemData.handle (jquery-3.1.1.js:5009) )。

有几种约定可以定义特殊的groovy脚本:

  • .gradle用于构建配置脚本
  • .properties作为构建设置脚本
  • {li> build.gradlesettings.gradle中获取全局初始化脚本

您可以创建其他init.gradle Groovy脚本并通过USER_HOME/.gradle/使用它们,或将它们放在特殊位置(例如.gradle以将它们用作初始化脚本)。

所有这些脚本之间的主要区别在于它们应用的上下文。所有脚本首先实现Script接口和第二个(特定于角色)接口。 Gradle文档调用此行为&#34;附加委托对象&#34;。

  • apply from:脚本应用于Project对象
  • USER_HOME/.gradle/init.d/脚本应用于Settings对象
  • 初始化脚本应用于Gradle对象

现在,我们甚至可以理解上面提到的代码示例:

build.gradle

settings.gradle接口定义了include 'project-subproj1', 'project-subproj2', 'project-subproj3', 'project-subproj4' 方法,该方法以Groovy样式调用:没有括号和跨行。您也可以在Settings文件中应用逻辑,例如在包括特定项目之前要求条件。

答案 2 :(得分:1)

是的, settings.gradle 是一个Groovy脚本,就像其他Gradle脚本一样。 settings.gradle 在初始化阶段执行,因此,它是指定子项目的多项目基本文件,您可以通过几种方式应用它们。

您也可以单独包含每个项目,最后效果相同。

include 'project-subproj1'
include 'project-subproj2'
include 'project-subproj3'
include 'project-subproj4'

可以遍历列表。

['project-subproj1',
'project-subproj2',
'project-subproj3',
'project-subproj4'].each({include it})

取决于您的感觉,您的感觉更清晰。