",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+r+"*(?:\"\"|'')"),a.innerHTML="",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=e.length&&new RegExp(e.join("|")),bm=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a)))if(d.nodeType===9)try{return o.apply(f,n.call(d.querySelectorAll(a),0)),f}catch(i){}else if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){var j=d.getAttribute("id"),k=j||q,l=G.test(a)&&d.parentNode||d;j?k=k.replace(c,"\\$&"):d.setAttribute("id",k);try{return o.apply(f,n.call(l.querySelectorAll(a.replace(C,"[id='"+k+"'] $&")),0)),f}catch(i){}finally{j||d.removeAttribute("id")}}return b(a,d,f,g,h)},g&&(T(function(b){a=g.call(b,"div");try{g.call(b,"[test!='']:sizzle"),f.push($.match.PSEUDO)}catch(c){}}),f=new RegExp(f.join("|")),Z.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!ba(b)&&!f.test(c)&&(!e||!e.test(c)))try{var h=g.call(b,c);if(h||a||b.document&&b.document.nodeType!==11)return h}catch(i){}return Z(c,null,null,[b]).length>0})}(),Z.attr=p.attr,p.find=Z,p.expr=Z.selectors,p.expr[":"]=p.expr.pseudos,p.unique=Z.uniqueSort,p.text=Z.getText,p.isXMLDoc=Z.isXML,p.contains=Z.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b0)for(e=d;e=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*\s*$/g,bz={option:[1,"",""],legend:[1,"",""],thead:[1,"",""],tr:[2,"",""],td:[3,"",""],col:[2,"",""],area:[1,"",""],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X",""]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1>$2>");try{for(;d1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=0,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(g=b===e&&bA;(h=a[s])!=null;s++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{g=g||bk(b),l=l||g.appendChild(b.createElement("div")),h=h.replace(bo,"<$1>$2>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]===""&&!m?l.childNodes:[];for(f=n.length-1;f>=0;--f)p.nodeName(n[f],"tbody")&&!n[f].childNodes.length&&n[f].parentNode.removeChild(n[f])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l=g.lastChild}h.nodeType?t.push(h):t=p.merge(t,h)}l&&(g.removeChild(l),h=l=g=null);if(!p.support.appendChecked)for(s=0;(h=t[s])!=null;s++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(s=0;(h=t[s])!=null;s++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[s+1,0].concat(r)),s+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^margin/,bO=new RegExp("^("+q+")(.*)$","i"),bP=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bQ=new RegExp("^([-+])=("+q+")","i"),bR={},bS={position:"absolute",visibility:"hidden",display:"block"},bT={letterSpacing:0,fontWeight:400,lineHeight:1},bU=["Top","Right","Bottom","Left"],bV=["Webkit","O","Moz","ms"],bW=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return bZ(this,!0)},hide:function(){return bZ(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bW.apply(this,arguments):this.each(function(){(c?a:bY(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bX(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bQ.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bX(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bT&&(f=bT[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(a,b){var c,d,e,f,g=getComputedStyle(a,null),h=a.style;return g&&(c=g[b],c===""&&!p.contains(a.ownerDocument.documentElement,a)&&(c=p.style(a,b)),bP.test(c)&&bN.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=c,c=g.width,h.width=d,h.minWidth=e,h.maxWidth=f)),c}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bP.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0||bH(a,"display")!=="none"?ca(a,b,d):p.swap(a,bS,function(){return ca(a,b,d)})},set:function(a,c,d){return b$(a,c,d?b_(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bP.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bU[d]+b]=e[d]||e[d-2]||e[0];return f}},bN.test(a)||(p.cssHooks[a+b].set=b$)});var cc=/%20/g,cd=/\[\]$/,ce=/\r?\n/g,cf=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,cg=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||cg.test(this.nodeName)||cf.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(ce,"\r\n")}}):{name:b.name,value:c.replace(ce,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ch(d,a[d],c,f);return e.join("&").replace(cc,"+")};var ci,cj,ck=/#.*$/,cl=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cm=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,cn=/^(?:GET|HEAD)$/,co=/^\/\//,cp=/\?/,cq=/ + X Gradle Release Notes Version 2.7 With this release, the Gradle team moves into a more rapid release cycle, with a goal to release a new version of Gradle every 4-6 weeks. By increasing our release frequency, we aim to reduce the wait time for important bug fixes, as well as get new features out sooner. Even with a short development cycle, this release still contains some important features and improvements. As well as fixing quite a few bugs, we've made incremental improvements to the new "Gradle TestKit" and enhanced the experience of developing Play applications using Gradle with continuous build. In addition to this, this version of Gradle now makes it easier use GitHub or BitBucket to back an authenticated Maven repository, by adding support for preemptive HTTP authentication. Table Of Contents Important: Performance regression with any wrapper generated by Gradle 2.6 New and noteworthy in Gradle 2.7 Selection of HTTP authentication schemes Support for preemptive HTTP authentication Gradle TestKit executes tests within an isolated environment Play application displays build failures when running with --continuous Support for Play 2.4 Managed model improvements Dependency management for JVM components Fixed issues Potential breaking changes Changes to ANTLR generated sources and package structure Filtering source directory with overlapping source and resource directories in Eclipse External contributions Known issues Important: Performance regression with any wrapper generated by Gradle 2.6 If you generated your Gradle wrapper with Gradle 2.6, we strongly recommend you regenerate your gradle-wrapper.jar with Gradle 2.7. The new checksum validation feature added in 2.6 introduced a serious performance degradation in the Gradle wrapper. This issue affects the startup time for any gradle execution via this wrapper. This issue has been fixed in 2.7. NOTE: This only affects wrappers generated by Gradle 2.6. If you generated your wrapper with a older version, you can still configure that wrapper to point to Gradle 2.6 without issue. New and noteworthy in Gradle 2.7 Selection of HTTP authentication schemes incubating feature When authenticating to Maven or Ivy repositories over HTTP/HTTPS, Gradle will attempt to use all supported authentication schemes to connect (NTLM, Kerberos, Digest, Basic). This release allows for the explicit selection of authentication schemes that should be used, allowing a build author to prevent the use of an unwanted authentication scheme. The authentication schemes to use are specified by adding them to the new authentication element for a repository. For example, to configure a repository to use only digest authentication: repositories { maven { url 'https://repo.mycompany.com/maven2' credentials { username 'user' password 'password' } authentication { digest(DigestAuthentication) } } } Currently, only BasicAuthentication and DigestAuthentication schemes can be explicitly configured, and only for HTTP transport. More details can be found in the Gradle User Guide. Support for preemptive HTTP authentication incubating feature Building on the new support for selecting authentication schemes, Gradle will now send preemptive HTTP authentication for repositories configured to use BasicAuthentication. Gradle will normally submit HTTP credentials only when a server responds with an authentication challenge (401-UNAUTHORIZED). This avoids sending unencrypted credentials when not required. However, in some cases a server will respond with a different response for resources requiring authentication (e.g. GitHub will return a 404-NOT-FOUND). This causes dependency resolution to fail. To get around this behavior, credentials may be sent to the server preemptively. Where a repository is explicitly configured to use the BasicAuthentication scheme, Gradle will send credentials preemptively for every request: authentication { basic(BasicAuthentication) // enable preemptive authentication } Gradle TestKit executes tests within an isolated environment incubating feature The previous release of Gradle introduced the Gradle TestKit for functionally testing Gradle plugins. This release extends the existing TestKit feature set by adding Test execution isolation. Test execution is now performed in an isolated "working space" in order to prevent builds under test inheriting any environmental configuration from the current user. The TestKit uses dedicated, reusable Gradle daemon processes; after executing all functional tests for a build, these daemon processes are stopped. Play application displays build failures when running with --continuous incubating feature The initial release of the Gradle Play plugin allowed Play applications to be developed in a continuous build, automatically reloading resources and application classes on rebuild. However, when a build failure occurred, Gradle would simply leave the existing application running. When running with Gradle 2.7, the running Play application will reload on build failure, showing any build failure message in the browser. Support for Play 2.4 incubating feature In this release, the 'play' plugin has been updated to support Play 2.4, and includes support for the new injected routes generator. You can configure the routes compiler to use the injected routes generator, by using a new configuration option on the play component: model { components { play { injectedRoutesGenerator = true } } } By default, Gradle will use the static routes generator. Managed model improvements incubating feature Managed types now support properties of any primitive type (boolean, byte, char, short, int, long, float and double), as well as any of their boxed types (respectively Boolean, Byte, Character, Short, Integer, Long, Float and Double). Primitive boolean properties can be declared with either a classic getter or an is-style getter. e.g. @Managed interface ManagedType { boolean getEnabled() void setEnabled(boolean enabled) boolean isActive() void setActive(boolean active) int getCount() void setCount(int value) } It is possible for a single boolean property to have both a get and is getter. Dependency management for JVM components incubating feature This release introduces new dependency management features for JVM components, an important step toward full variant-aware dependency resolution. This feature is built upon the new rule based model configuration and requires you to use the new jvm-component plugin: plugins { id 'jvm-component' id 'java-lang' } A defined JvmLibrarySpec can declare API dependencies on any other locally-produced libraries. This includes other JvmLibrarySpec instances in the same Gradle project, and JvmLibrarySpec components declared in other projects of a multi-project build. model { components { main(JvmLibrarySpec) { targetPlatform 'java7' targetPlatform 'java8' sources { java { dependencies { library 'commons' } } } } commons(JvmLibrarySpec) { targetPlatform 'java7' } } } For a JvmLibrarySpec that is configured to produce multiple variants for different platforms, Gradle will generate and resolve a compatible binary variant of the depended-on library. In the example above, Gradle will produce 2 JAR variants of the 'main' library component, one each for JDK 1.7 and JDK 1.8. Both of these will be compiled against the JDK 1.7 Jar variant of the 'commons' library. More information about this incubating feature can be found in the User Guide. Fixed issues Potential breaking changes Changes to ANTLR generated sources and package structure The output directory for ANTLR generated sources is now calculated from package information in the grammar files. (This fixes a regression introduced in Gradle 2.2). The output directory for ANTLR3 and ANTLR4 generated sources is now relative to the path of the grammar in the ANTLR grammar folder. Filtering source directory with overlapping source and resource directories in Eclipse This release fixes a bug where generating the Eclipse classpath for projects with a shared directory for source and resource files using includes and excludes declarations could cause problems (see GRADLE-3335 for details). This fix changes the behaviour of applying exclude/include filters to the source directory, which may result in a different set of directories in the generated Eclipse classpath. For an exclude to be applied to the source folder in the Eclipse classpath, that exclude must be declared for both the java and resources sourceSets. This is only important in the case of overlapping source and resource directories. External contributions We would like to thank the following community members for making contributions to this release of Gradle. Tony Abbott - Performance test improvements Emmanuel Bourg - Use correct import for Sets in ProjectDependencyArtifactIdExtractorHack Bruno Bowden - Documentation improvements Ethan Hall - Support for Checkstyle 6.8 Chris Purcell - Documentation improvements Sebastian Schuberth - Documentation improvements Hao Xia - GRADLE-3338 Bump up joda-time version to resolve issue with JDK 8u60 We love getting contributions from the Gradle community. For information on contributing, please see gradle.org/contribute. Known issues Known issues are problems that were discovered post release that are directly related to changes made in this release. Gradle 2.7 Release Notes 点击 这是indexloc提供的php浏览器服务,不要输入任何密码和下载
With this release, the Gradle team moves into a more rapid release cycle, with a goal to release a new version of Gradle every 4-6 weeks. By increasing our release frequency, we aim to reduce the wait time for important bug fixes, as well as get new features out sooner.
Even with a short development cycle, this release still contains some important features and improvements. As well as fixing quite a few bugs, we've made incremental improvements to the new "Gradle TestKit" and enhanced the experience of developing Play applications using Gradle with continuous build.
In addition to this, this version of Gradle now makes it easier use GitHub or BitBucket to back an authenticated Maven repository, by adding support for preemptive HTTP authentication.
--continuous
ANTLR
If you generated your Gradle wrapper with Gradle 2.6, we strongly recommend you regenerate your gradle-wrapper.jar with Gradle 2.7. The new checksum validation feature added in 2.6 introduced a serious performance degradation in the Gradle wrapper. This issue affects the startup time for any gradle execution via this wrapper. This issue has been fixed in 2.7.
gradle-wrapper.jar
NOTE: This only affects wrappers generated by Gradle 2.6. If you generated your wrapper with a older version, you can still configure that wrapper to point to Gradle 2.6 without issue.
When authenticating to Maven or Ivy repositories over HTTP/HTTPS, Gradle will attempt to use all supported authentication schemes to connect (NTLM, Kerberos, Digest, Basic). This release allows for the explicit selection of authentication schemes that should be used, allowing a build author to prevent the use of an unwanted authentication scheme.
The authentication schemes to use are specified by adding them to the new authentication element for a repository.
For example, to configure a repository to use only digest authentication:
repositories { maven { url 'https://repo.mycompany.com/maven2' credentials { username 'user' password 'password' } authentication { digest(DigestAuthentication) } } }
Currently, only BasicAuthentication and DigestAuthentication schemes can be explicitly configured, and only for HTTP transport. More details can be found in the Gradle User Guide.
BasicAuthentication
DigestAuthentication
Building on the new support for selecting authentication schemes, Gradle will now send preemptive HTTP authentication for repositories configured to use BasicAuthentication.
Gradle will normally submit HTTP credentials only when a server responds with an authentication challenge (401-UNAUTHORIZED). This avoids sending unencrypted credentials when not required. However, in some cases a server will respond with a different response for resources requiring authentication (e.g. GitHub will return a 404-NOT-FOUND). This causes dependency resolution to fail.
To get around this behavior, credentials may be sent to the server preemptively. Where a repository is explicitly configured to use the BasicAuthentication scheme, Gradle will send credentials preemptively for every request:
authentication { basic(BasicAuthentication) // enable preemptive authentication }
The previous release of Gradle introduced the Gradle TestKit for functionally testing Gradle plugins.
This release extends the existing TestKit feature set by adding Test execution isolation. Test execution is now performed in an isolated "working space" in order to prevent builds under test inheriting any environmental configuration from the current user.
The TestKit uses dedicated, reusable Gradle daemon processes; after executing all functional tests for a build, these daemon processes are stopped.
The initial release of the Gradle Play plugin allowed Play applications to be developed in a continuous build, automatically reloading resources and application classes on rebuild. However, when a build failure occurred, Gradle would simply leave the existing application running.
When running with Gradle 2.7, the running Play application will reload on build failure, showing any build failure message in the browser.
In this release, the 'play' plugin has been updated to support Play 2.4, and includes support for the new injected routes generator.
You can configure the routes compiler to use the injected routes generator, by using a new configuration option on the play component:
play
model { components { play { injectedRoutesGenerator = true } } }
By default, Gradle will use the static routes generator.
Managed types now support properties of any primitive type (boolean, byte, char, short, int, long, float and double), as well as any of their boxed types (respectively Boolean, Byte, Character, Short, Integer, Long, Float and Double). Primitive boolean properties can be declared with either a classic getter or an is-style getter. e.g.
boolean
byte
char
short
int
long
float
double
Boolean
Byte
Character
Short
Integer
Long
Float
Double
is
@Managed interface ManagedType { boolean getEnabled() void setEnabled(boolean enabled) boolean isActive() void setActive(boolean active) int getCount() void setCount(int value) }
It is possible for a single boolean property to have both a get and is getter.
get
This release introduces new dependency management features for JVM components, an important step toward full variant-aware dependency resolution. This feature is built upon the new rule based model configuration and requires you to use the new jvm-component plugin:
jvm-component
plugins { id 'jvm-component' id 'java-lang' }
A defined JvmLibrarySpec can declare API dependencies on any other locally-produced libraries. This includes other JvmLibrarySpec instances in the same Gradle project, and JvmLibrarySpec components declared in other projects of a multi-project build.
JvmLibrarySpec
model { components { main(JvmLibrarySpec) { targetPlatform 'java7' targetPlatform 'java8' sources { java { dependencies { library 'commons' } } } } commons(JvmLibrarySpec) { targetPlatform 'java7' } } }
For a JvmLibrarySpec that is configured to produce multiple variants for different platforms, Gradle will generate and resolve a compatible binary variant of the depended-on library. In the example above, Gradle will produce 2 JAR variants of the 'main' library component, one each for JDK 1.7 and JDK 1.8. Both of these will be compiled against the JDK 1.7 Jar variant of the 'commons' library.
More information about this incubating feature can be found in the User Guide.
ANTLR3
ANTLR4
This release fixes a bug where generating the Eclipse classpath for projects with a shared directory for source and resource files using includes and excludes declarations could cause problems (see GRADLE-3335 for details). This fix changes the behaviour of applying exclude/include filters to the source directory, which may result in a different set of directories in the generated Eclipse classpath.
For an exclude to be applied to the source folder in the Eclipse classpath, that exclude must be declared for both the java and resources sourceSets. This is only important in the case of overlapping source and resource directories.
We would like to thank the following community members for making contributions to this release of Gradle.
Sets
ProjectDependencyArtifactIdExtractorHack
We love getting contributions from the Gradle community. For information on contributing, please see gradle.org/contribute.
Known issues are problems that were discovered post release that are directly related to changes made in this release.