{"id":15080,"date":"2014-08-02T17:52:37","date_gmt":"2014-08-02T12:22:37","guid":{"rendered":"https:\/\/2thenew.today\/blog\/?p=15080"},"modified":"2014-08-06T12:24:32","modified_gmt":"2014-08-06T06:54:32","slug":"manage-javascript-library-dependencies-via-bower-in-grails","status":"publish","type":"post","link":"https:\/\/2thenew.today\/blog\/manage-javascript-library-dependencies-via-bower-in-grails\/","title":{"rendered":"Manage javascript library dependencies via bower in Grails"},"content":{"rendered":"<p>I loved the way node package manager loads and manage the JS dependencies, thought of doing that in my grails project as well. Until now all our third party JS files used to live with our source code. So loading them the way Maven loads Jar dependencies for us is what we are going to discuss in this blog.<\/p>\n<p>We would need to install node.js, Grunt and bower to make it work the way we just talked about. After going through few write ups, I came up with the few concrete steps to be followed which are given below :<\/p>\n<p>1. Install <a title=\"here\" href=\"http:\/\/nodejs.org\/download\/\" target=\"_blank\">node.js<\/a>, if it is not installed.<br \/>\n2. In your project folder create following files:<br \/>\n   &nbsp;&nbsp;&nbsp;&nbsp;a. package.json<br \/>\n   &nbsp;&nbsp;&nbsp;&nbsp;b. Gruntfile.js<br \/>\n   &nbsp;&nbsp;&nbsp;&nbsp;c. bower.json<br \/>\n   &nbsp;&nbsp;&nbsp;&nbsp;d. &#8220;.bowerrc&#8221;<br \/>\n3. Create two scripts files to install grunt and bower preferably under project\/scripts folder.<br \/>\n   &nbsp;&nbsp;&nbsp;&nbsp;a. InstallGruntAsAdminStep1.sh<br \/>\n   &nbsp;&nbsp;&nbsp;&nbsp;b. InstallGruntStep2.sh<br \/>\n4. To update or install new dependencies are they are changed automatically during run-app, update your _Events.groovy to execute grunt tasks.<br \/>\n5. Now go to home folder on your Terminal\/Command prompt and execute the following script<br \/>\n   &nbsp;&nbsp;&nbsp;&nbsp; InstallGruntAsAdminStep1.sh (Run this as a Admin\/sudo user).<br \/>\n6. Now go to project folder on your Terminal\/Command prompt and execute the following script<br \/>\n   &nbsp;&nbsp;&nbsp;&nbsp; InstallGruntStep2.sh (Run as your regular user).<br \/>\n7. Now try grails run-app command. It should download required dependencies like angularjs etc.<\/p>\n<p><strong>package.json :<\/strong><\/p>\n<p>[javascript]<br \/>\n{<br \/>\n    &quot;name&quot;: &quot;ProjectName&quot;,<br \/>\n    &quot;version&quot;: &quot;0.0.0&quot;,<br \/>\n    &quot;dependencies&quot;: {<br \/>\n        &quot;bower&quot;: &quot;1.3.8&quot;,<br \/>\n        &quot;grunt&quot;: &quot;^0.4.5&quot;,<br \/>\n        &quot;grunt-shell&quot;: &quot;^0.7.0&quot;<br \/>\n    },<br \/>\n    &quot;scripts&quot;: {<br \/>\n        &quot;postinstall&quot;:&quot;bower install&quot;<br \/>\n    },<br \/>\n    &quot;main&quot;: &quot;Gruntfile.js&quot;,<br \/>\n    &quot;author&quot;: &quot;Amit Jain&quot;,<br \/>\n    &quot;license&quot;: &quot;GPL-2.0&quot;<br \/>\n}<br \/>\n[\/javascript]<\/p>\n<p><strong>Gruntfile.js<\/strong>:<\/p>\n<p>[javascript]<br \/>\nmodule.exports = function (grunt) {<\/p>\n<p>    grunt.loadNpmTasks(&quot;grunt-shell&quot;);<\/p>\n<p>    grunt.initConfig({<br \/>\n        shell: {<br \/>\n            options: {<br \/>\n                stdout: true<br \/>\n            },<br \/>\n            localInstall: {<br \/>\n                command: &quot;.\/node_modules\/.bin\/bower update &#8211;quiet &#8211;offline&quot;<br \/>\n            },<\/p>\n<p>            webInstall: {<br \/>\n                command: &quot;.\/node_modules\/.bin\/bower update &#8211;quiet&quot;<br \/>\n            }<br \/>\n        }<br \/>\n    });<\/p>\n<p>    grunt.registerTask(&quot;localInstall&quot;, [ &quot;shell:localInstall&quot;]);<br \/>\n    grunt.registerTask(&quot;webInstall&quot;, [ &quot;shell:webInstall&quot;]);<br \/>\n    grunt.registerTask(&quot;default&quot;, [&quot;localInstall&quot;]);<\/p>\n<p>};<br \/>\n[\/javascript]<\/p>\n<p><strong>bower.json<\/strong>: This file provides the list of required JS dependencies, you may like to update it as per your requirements.<\/p>\n<p>[javascript]<br \/>\n{<br \/>\n  &quot;name&quot;: &quot;projectName&quot;,<br \/>\n  &quot;version&quot;: &quot;0.0.0&quot;,<br \/>\n  &quot;dependencies&quot;: {<br \/>\n    &quot;angular&quot;: &quot;1.2.20&quot;,<br \/>\n    &quot;bootstrap&quot;: &quot;3.1.1&quot;,<br \/>\n    &quot;angular-resource&quot;: &quot;1.2.20&quot;,<br \/>\n    &quot;angular-route&quot;: &quot;1.2.20&quot;,<br \/>\n    &quot;angular-bootstrap&quot;: &quot;0.11.0&quot;<br \/>\n  }<br \/>\n}<br \/>\n[\/javascript]<\/p>\n<p><strong>&#8220;.bowerrc&#8221;<\/strong> : This file is required only when we want to configure the path where our js dependencies are to be downloaded.<\/p>\n<p>[javascript]<br \/>\n  {<br \/>\n    &quot;directory&quot; : &quot;web-app\/bower-components&quot;<br \/>\n  }<br \/>\n[\/javascript]<\/p>\n<p><strong>_Events.groovy<\/strong><br \/>\nTo check for any dependencies required to be downloaded, we executed the grunt tasks for the same in _Events.groovy as given below :<\/p>\n<p>[groovy]<\/p>\n<p>eventCompileStart = {kind -&gt;<br \/>\n    \/\/ Ants Project is available via: kind.ant.project<br \/>\n    executeGruntTasks()<br \/>\n    \/\/ Obtain status and output<br \/>\n}<\/p>\n<p>private void executeGruntTasks(){<br \/>\n    println &quot;| Load js dependencies from cache&#8230;&quot;<br \/>\n    def proc = &quot;grunt&quot;.execute()  \/\/ execute default task to load dependencies from local cache.<br \/>\n    proc.waitFor()<br \/>\n    if(proc.exitValue()!=0){<br \/>\n        println &quot;| Error occured while loading dependencies from local cache : ${proc.err.text}&quot;<br \/>\n        println &quot;| Try loading dependencies from web&#8230;&quot;<br \/>\n        proc = &quot;grunt webInstall&quot;.execute()<br \/>\n        proc.waitFor()                               \/\/ Wait for the command to finish<br \/>\n        println &quot;Output: ${proc.in.text}&quot;<br \/>\n    }<br \/>\n}<br \/>\n[\/groovy]<\/p>\n<p><strong>InstallGruntAsAdminStep1.sh<\/strong><\/p>\n<p>[shell]<br \/>\nnpm install<br \/>\nnpm install  -g grunt-cli<br \/>\nnpm install  -g grunt<br \/>\nnpm install  -g bower<br \/>\nnpm install  -g grunt-shell<br \/>\n[\/shell]<\/p>\n<p><strong>InstallGruntStep2.sh<\/strong><\/p>\n<p>[shell]<br \/>\nnpm install<br \/>\nnpm install  grunt<br \/>\nnpm install  bower<br \/>\nnpm install  grunt-shell<br \/>\n[\/shell]<\/p>\n<p>Hopefully it would have worked after following these steps, incase you face any issue please discuss them as comments. And if anybody has ideas for improvements please share them for everybody&#8217;s benefit.<\/p>\n<p>Cheers!<br \/>\nAmit Jain<br \/>\namit@intelligrape.com <\/p>\n","protected":false},"excerpt":{"rendered":"<p>I loved the way node package manager loads and manage the JS dependencies, thought of doing that in my grails project as well. Until now all our third party JS files used to live with our source code. So loading them the way Maven loads Jar dependencies for us is what we are going to [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":12,"footnotes":""},"categories":[7],"tags":[1467,1496,4840,1466],"class_list":["post-15080","post","type-post","status-publish","format-standard","hentry","category-grails","tag-bower","tag-dependency-management","tag-grails","tag-grunt"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"I loved the way node package manager loads and manage the JS dependencies, thought of doing that in my grails project as well. Until now all our third party JS files used to live with our source code. So loading them the way Maven loads Jar dependencies for us is what we are going to\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Amit Jain\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/2thenew.today\/blog\/manage-javascript-library-dependencies-via-bower-in-grails\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"TO THE NEW BLOG\" \/>\n\t\t<meta property=\"og:type\" content=\"blog\" \/>\n\t\t<meta property=\"og:title\" content=\"Manage javascript library dependencies via bower in Grails | TO THE NEW Blog\" \/>\n\t\t<meta property=\"og:description\" content=\"I loved the way node package manager loads and manage the JS dependencies, thought of doing that in my grails project as well. Until now all our third party JS files used to live with our source code. So loading them the way Maven loads Jar dependencies for us is what we are going to\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/2thenew.today\/blog\/manage-javascript-library-dependencies-via-bower-in-grails\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/2thenew.today\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/2thenew.today\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:site\" content=\"@tothenew\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Manage javascript library dependencies via bower in Grails | TO THE NEW Blog\" \/>\n\t\t<meta name=\"twitter:description\" content=\"I loved the way node package manager loads and manage the JS dependencies, thought of doing that in my grails project as well. Until now all our third party JS files used to live with our source code. So loading them the way Maven loads Jar dependencies for us is what we are going to\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/2thenew.today\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/manage-javascript-library-dependencies-via-bower-in-grails\\\/#article\",\"name\":\"Manage javascript library dependencies via bower in Grails | TO THE NEW Blog\",\"headline\":\"Manage javascript library dependencies via bower in Grails\",\"author\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/amit\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#organization\"},\"datePublished\":\"2014-08-02T17:52:37+05:30\",\"dateModified\":\"2014-08-06T12:24:32+05:30\",\"inLanguage\":\"en-US\",\"commentCount\":3,\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/manage-javascript-library-dependencies-via-bower-in-grails\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/manage-javascript-library-dependencies-via-bower-in-grails\\\/#webpage\"},\"articleSection\":\"Grails, Bower, dependency management, Grails, Grunt\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/manage-javascript-library-dependencies-via-bower-in-grails\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.tothenew.com\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/grails\\\/#listItem\",\"name\":\"Grails\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/grails\\\/#listItem\",\"position\":2,\"name\":\"Grails\",\"item\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/grails\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/manage-javascript-library-dependencies-via-bower-in-grails\\\/#listItem\",\"name\":\"Manage javascript library dependencies via bower in Grails\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/manage-javascript-library-dependencies-via-bower-in-grails\\\/#listItem\",\"position\":3,\"name\":\"Manage javascript library dependencies via bower in Grails\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/grails\\\/#listItem\",\"name\":\"Grails\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#organization\",\"name\":\"TO THE NEW Blog\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/amit\\\/#author\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/amit\\\/\",\"name\":\"Amit Jain\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/manage-javascript-library-dependencies-via-bower-in-grails\\\/#authorImage\",\"url\":\"https:\\\/\\\/newersworld-sf-static.tothenew.net\\\/prod\\\/profilePicFolder\\\/1cbbcbd3-718c-4d6d-829c-4e225ae91a1a_amit.jain@tothenew.com.jpg\",\"width\":96,\"height\":96,\"caption\":\"Amit Jain\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/manage-javascript-library-dependencies-via-bower-in-grails\\\/#webpage\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/manage-javascript-library-dependencies-via-bower-in-grails\\\/\",\"name\":\"Manage javascript library dependencies via bower in Grails | TO THE NEW Blog\",\"description\":\"I loved the way node package manager loads and manage the JS dependencies, thought of doing that in my grails project as well. Until now all our third party JS files used to live with our source code. So loading them the way Maven loads Jar dependencies for us is what we are going to\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/manage-javascript-library-dependencies-via-bower-in-grails\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/amit\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/amit\\\/#author\"},\"datePublished\":\"2014-08-02T17:52:37+05:30\",\"dateModified\":\"2014-08-06T12:24:32+05:30\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/\",\"name\":\"TO THE NEW Blog\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Manage javascript library dependencies via bower in Grails | TO THE NEW Blog","description":"I loved the way node package manager loads and manage the JS dependencies, thought of doing that in my grails project as well. Until now all our third party JS files used to live with our source code. So loading them the way Maven loads Jar dependencies for us is what we are going to","canonical_url":"https:\/\/2thenew.today\/blog\/manage-javascript-library-dependencies-via-bower-in-grails\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/2thenew.today\/blog\/manage-javascript-library-dependencies-via-bower-in-grails\/#article","name":"Manage javascript library dependencies via bower in Grails | TO THE NEW Blog","headline":"Manage javascript library dependencies via bower in Grails","author":{"@id":"https:\/\/2thenew.today\/blog\/author\/amit\/#author"},"publisher":{"@id":"https:\/\/2thenew.today\/blog\/#organization"},"datePublished":"2014-08-02T17:52:37+05:30","dateModified":"2014-08-06T12:24:32+05:30","inLanguage":"en-US","commentCount":3,"mainEntityOfPage":{"@id":"https:\/\/2thenew.today\/blog\/manage-javascript-library-dependencies-via-bower-in-grails\/#webpage"},"isPartOf":{"@id":"https:\/\/2thenew.today\/blog\/manage-javascript-library-dependencies-via-bower-in-grails\/#webpage"},"articleSection":"Grails, Bower, dependency management, Grails, Grunt"},{"@type":"BreadcrumbList","@id":"https:\/\/2thenew.today\/blog\/manage-javascript-library-dependencies-via-bower-in-grails\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/2thenew.today\/blog#listItem","position":1,"name":"Home","item":"https:\/\/2thenew.today\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/2thenew.today\/blog\/category\/grails\/#listItem","name":"Grails"}},{"@type":"ListItem","@id":"https:\/\/2thenew.today\/blog\/category\/grails\/#listItem","position":2,"name":"Grails","item":"https:\/\/2thenew.today\/blog\/category\/grails\/","nextItem":{"@type":"ListItem","@id":"https:\/\/2thenew.today\/blog\/manage-javascript-library-dependencies-via-bower-in-grails\/#listItem","name":"Manage javascript library dependencies via bower in Grails"},"previousItem":{"@type":"ListItem","@id":"https:\/\/2thenew.today\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/2thenew.today\/blog\/manage-javascript-library-dependencies-via-bower-in-grails\/#listItem","position":3,"name":"Manage javascript library dependencies via bower in Grails","previousItem":{"@type":"ListItem","@id":"https:\/\/2thenew.today\/blog\/category\/grails\/#listItem","name":"Grails"}}]},{"@type":"Organization","@id":"https:\/\/2thenew.today\/blog\/#organization","name":"TO THE NEW Blog","url":"https:\/\/2thenew.today\/blog\/"},{"@type":"Person","@id":"https:\/\/2thenew.today\/blog\/author\/amit\/#author","url":"https:\/\/2thenew.today\/blog\/author\/amit\/","name":"Amit Jain","image":{"@type":"ImageObject","@id":"https:\/\/2thenew.today\/blog\/manage-javascript-library-dependencies-via-bower-in-grails\/#authorImage","url":"https:\/\/newersworld-sf-static.tothenew.net\/prod\/profilePicFolder\/1cbbcbd3-718c-4d6d-829c-4e225ae91a1a_amit.jain@tothenew.com.jpg","width":96,"height":96,"caption":"Amit Jain"}},{"@type":"WebPage","@id":"https:\/\/2thenew.today\/blog\/manage-javascript-library-dependencies-via-bower-in-grails\/#webpage","url":"https:\/\/2thenew.today\/blog\/manage-javascript-library-dependencies-via-bower-in-grails\/","name":"Manage javascript library dependencies via bower in Grails | TO THE NEW Blog","description":"I loved the way node package manager loads and manage the JS dependencies, thought of doing that in my grails project as well. Until now all our third party JS files used to live with our source code. So loading them the way Maven loads Jar dependencies for us is what we are going to","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/2thenew.today\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/2thenew.today\/blog\/manage-javascript-library-dependencies-via-bower-in-grails\/#breadcrumblist"},"author":{"@id":"https:\/\/2thenew.today\/blog\/author\/amit\/#author"},"creator":{"@id":"https:\/\/2thenew.today\/blog\/author\/amit\/#author"},"datePublished":"2014-08-02T17:52:37+05:30","dateModified":"2014-08-06T12:24:32+05:30"},{"@type":"WebSite","@id":"https:\/\/2thenew.today\/blog\/#website","url":"https:\/\/2thenew.today\/blog\/","name":"TO THE NEW Blog","inLanguage":"en-US","publisher":{"@id":"https:\/\/2thenew.today\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"TO THE NEW BLOG","og:type":"blog","og:title":"Manage javascript library dependencies via bower in Grails | TO THE NEW Blog","og:description":"I loved the way node package manager loads and manage the JS dependencies, thought of doing that in my grails project as well. Until now all our third party JS files used to live with our source code. So loading them the way Maven loads Jar dependencies for us is what we are going to","og:url":"https:\/\/2thenew.today\/blog\/manage-javascript-library-dependencies-via-bower-in-grails\/","og:image":"https:\/\/2thenew.today\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png","og:image:secure_url":"https:\/\/2thenew.today\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png","twitter:card":"summary","twitter:site":"@tothenew","twitter:title":"Manage javascript library dependencies via bower in Grails | TO THE NEW Blog","twitter:description":"I loved the way node package manager loads and manage the JS dependencies, thought of doing that in my grails project as well. Until now all our third party JS files used to live with our source code. So loading them the way Maven loads Jar dependencies for us is what we are going to","twitter:image":"https:\/\/2thenew.today\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png"},"aioseo_meta_data":{"post_id":"15080","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"created":"2021-04-29 18:34:56","updated":"2024-02-29 09:29:25","focus_keyword":null,"additional_keywords":null,"truseo_locale":null,"ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/2thenew.today\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/2thenew.today\/blog\/category\/grails\/\" title=\"Grails\">Grails<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tManage javascript library dependencies via bower in Grails\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/2thenew.today\/blog"},{"label":"Grails","link":"https:\/\/2thenew.today\/blog\/category\/grails\/"},{"label":"Manage javascript library dependencies via bower in Grails","link":"https:\/\/2thenew.today\/blog\/manage-javascript-library-dependencies-via-bower-in-grails\/"}],"_links":{"self":[{"href":"https:\/\/2thenew.today\/blog\/wp-json\/wp\/v2\/posts\/15080","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/2thenew.today\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/2thenew.today\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/2thenew.today\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/2thenew.today\/blog\/wp-json\/wp\/v2\/comments?post=15080"}],"version-history":[{"count":0,"href":"https:\/\/2thenew.today\/blog\/wp-json\/wp\/v2\/posts\/15080\/revisions"}],"wp:attachment":[{"href":"https:\/\/2thenew.today\/blog\/wp-json\/wp\/v2\/media?parent=15080"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/2thenew.today\/blog\/wp-json\/wp\/v2\/categories?post=15080"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/2thenew.today\/blog\/wp-json\/wp\/v2\/tags?post=15080"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}