{"id":152769,"name":"AODN Portal","description":"The gateway to Australian marine and climate science data.","url":"https://github.com/aodn/aodn-portal","last_synced_at":"2026-04-08T02:30:52.103Z","repository":{"id":5599389,"uuid":"6806252","full_name":"aodn/aodn-portal","owner":"aodn","description":"AODN Open Geospatial Portal","archived":false,"fork":false,"pushed_at":"2024-03-25T03:39:29.000Z","size":63565,"stargazers_count":21,"open_issues_count":6,"forks_count":14,"subscribers_count":20,"default_branch":"master","last_synced_at":"2025-10-16T02:04:36.780Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://portal.aodn.org.au/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aodn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2012-11-22T01:42:50.000Z","updated_at":"2024-06-07T20:10:36.000Z","dependencies_parsed_at":"2023-12-26T18:07:27.282Z","dependency_job_id":"976ee84c-6a52-4ba7-87fc-080e793eee44","html_url":"https://github.com/aodn/aodn-portal","commit_stats":{"total_commits":6756,"total_committers":58,"mean_commits":"116.48275862068965","dds":0.7822676139727649,"last_synced_commit":"378f5a921b3d646e1d777454b6b21806a32e2562"},"previous_names":[],"tags_count":460,"template":false,"template_full_name":null,"purl":"pkg:github/aodn/aodn-portal","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aodn%2Faodn-portal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aodn%2Faodn-portal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aodn%2Faodn-portal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aodn%2Faodn-portal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aodn","download_url":"https://codeload.github.com/aodn/aodn-portal/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aodn%2Faodn-portal/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280616692,"owners_count":26361249,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-23T02:00:06.710Z","response_time":142,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"owner":{"login":"aodn","name":"Australian Ocean Data Network","uuid":"2802166","kind":"organization","description":"","email":"info@aodn.org.au","website":"https://portal.aodn.org.au/","location":"Australia","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/2802166?v=4","repositories_count":60,"last_synced_at":"2024-03-26T02:10:01.422Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/aodn","funding_links":[],"total_stars":127,"followers":16,"following":0,"created_at":"2022-11-03T02:06:32.432Z","updated_at":"2024-03-26T02:10:02.031Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aodn","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aodn/repositories"},"packages":[],"commits":{"id":1455803,"full_name":"aodn/aodn-portal","default_branch":"master","total_commits":6756,"total_committers":53,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":127.47169811320755,"dds":0.7819715808170515,"past_year_total_commits":0,"past_year_total_committers":0,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":0.0,"past_year_dds":0.0,"last_synced_at":"2025-10-29T04:51:43.463Z","last_synced_commit":"378f5a921b3d646e1d777454b6b21806a32e2562","created_at":"2023-12-13T00:15:37.276Z","updated_at":"2025-10-29T04:45:04.002Z","committers":[{"name":"dnahodil","email":"dnahodil@utas.edu.au","login":"dnahodil","count":1473},{"name":"pmbohm","email":"pmbohm@utas.edu.au","login":"pmbohm","count":746},{"name":"Jon Burgess","email":"jkburges@gmail.com","login":"jkburges","count":690},{"name":"dnahodil","email":"dnahodil@80f082c3-aa3d-4a8a-bc4c-16289f4b763f","login":null,"count":518},{"name":"Dan Fruehauf","email":"malkodan@gmail.com","login":"danfruehauf","count":464},{"name":"pmbohm","email":"pmbohm@80f082c3-aa3d-4a8a-bc4c-16289f4b763f","login":null,"count":389},{"name":"pmak","email":"pmak@80f082c3-aa3d-4a8a-bc4c-16289f4b763f","login":null,"count":242},{"name":"craigj","email":"craigj@80f082c3-aa3d-4a8a-bc4c-16289f4b763f","login":null,"count":235},{"name":"tfotak","email":"tfotak@80f082c3-aa3d-4a8a-bc4c-16289f4b763f","login":null,"count":234},{"name":"anguss00","email":"angus.scheibner@utas.edu.au","login":null,"count":216},{"name":"aodn-ci","email":"developers@emii.org.au","login":"aodn-ci","count":134},{"name":"Tommy Fotak","email":"tommy.fotak@gmail.com","login":"tojofo","count":128},{"name":"Craig Jones","email":"Craig.Jones@utas.edu.au","login":"jonescc","count":127},{"name":"akashisama","email":"alex.mckeown@utas.edu.au","login":null,"count":120},{"name":"pblain","email":"pblain@80f082c3-aa3d-4a8a-bc4c-16289f4b763f","login":null,"count":112},{"name":"jburgess","email":"jburgess@80f082c3-aa3d-4a8a-bc4c-16289f4b763f","login":null,"count":96},{"name":"amckeown","email":"amckeown@80f082c3-aa3d-4a8a-bc4c-16289f4b763f","login":null,"count":76},{"name":"jenkins","email":"sys.admin@emii.org.au","login":"aodn-ci-deploy","count":72},{"name":"aodn-ci","email":"info@aodn.org.au","login":null,"count":67},{"name":"bhasin85","email":"bhasin85@gmail.com","login":"bhasin85","count":66},{"name":"Alex McKeown","email":"a.mckeown@utas.edu.au","login":"akashisama","count":63},{"name":"pblain","email":"peter.blain@utas.edu.au","login":null,"count":55},{"name":"jenkins","email":"sysadmin@emii.org.au","login":null,"count":45},{"name":"cmrose","email":"cmrose@utas.edu.au","login":"craigrose","count":42},{"name":"matias","email":"matias@80f082c3-aa3d-4a8a-bc4c-16289f4b763f","login":null,"count":42},{"name":"geoff","email":"geoff@80f082c3-aa3d-4a8a-bc4c-16289f4b763f","login":null,"count":41},{"name":"anguss00","email":"Angus.Scheibner@utas.edu.au","login":null,"count":40},{"name":"Tommy Fotak","email":"tommy.fotak@utas.edu.au","login":null,"count":36},{"name":"dnahodil","email":"dnahodil+git@gmail.com","login":null,"count":26},{"name":"paulinemak","email":"pauline.mak@utas.edu.au","login":null,"count":24},{"name":"gsatimos","email":"george.sattler@utas.edu.au","login":"gsatimos","count":21},{"name":"Leigh Gordon","email":"leigh.gordon@utas.edu.au","login":null,"count":16},{"name":"julian","email":"julian.here.com","login":null,"count":15},{"name":"nspool","email":"25042597+nspool","login":"nspool","count":13},{"name":"julian1","email":"julian.atkinson71@gmail.com","login":"julian1","count":12},{"name":"Alen Paulic","email":"alen.paulic@utas.edu.au","login":null,"count":7},{"name":"akashisama","email":"amckeown@utas.edu.au","login":null,"count":6},{"name":"Leigh Gordon","email":"lwgordonimos","login":"lwgordonimos","count":5},{"name":"ccmoloney","email":"cameron.moloney@utas.edu.au","login":null,"count":5},{"name":"Cameron Moloney","email":"cameron.moloney@gmail.com","login":"ccmoloney","count":5},{"name":"philip","email":"pmbohm@here","login":null,"count":4},{"name":"sjwilde","email":"sjwilde@80f082c3-aa3d-4a8a-bc4c-16289f4b763f","login":null,"count":4},{"name":"julian1","email":"jfca@utas.edu.au","login":null,"count":3},{"name":"utas-raymondng","email":"manfai.ng@utas.edu.au","login":"utas-raymondng","count":3},{"name":"Stewart Baillie (DevOps)","email":"stewart.baillie@utas.edu.au","login":"sqbaillie","count":3},{"name":"Stefan Hattrell","email":"29941279+digorgonzola","login":"digorgonzola","count":3},{"name":"Mark Hepburn","email":"Mark.Hepburn@gmail.com","login":"markhepburn","count":3},{"name":"aodn-ci-build","email":"info@aodn.edu.au","login":null,"count":2},{"name":"Sachit Rajbhandari","email":"sachit.rajbhandari@utas.edu.au","login":"sachitrajbhandari","count":2},{"name":"pblain","email":"thepeterblain@yahoo.com","login":"pblain","count":2},{"name":"my-ci-user","email":"my-ci-user@users.noreply.github.example.com","login":null,"count":1},{"name":"APaulic","email":"paulic.alen@gmail.com","login":"APaulic","count":1},{"name":"gsatimos","email":"georgesattler@gmail.com","login":"gmsattler","count":1}],"past_year_committers":[],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/aodn%2Faodn-portal/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2025-10-29T00:00:18.766Z","repositories_count":6089584,"commits_count":922516440,"contributors_count":35983866,"owners_count":1109633,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"aodn/aodn-portal","html_url":"https://github.com/aodn/aodn-portal","last_synced_at":"2025-08-31T18:31:18.756Z","status":null,"issues_count":54,"pull_requests_count":48,"avg_time_to_close_issue":13644833.23076923,"avg_time_to_close_pull_request":4738150.521739131,"issues_closed_count":52,"pull_requests_closed_count":46,"pull_request_authors_count":13,"issue_authors_count":10,"avg_comments_per_issue":3.611111111111111,"avg_comments_per_pull_request":0.7083333333333334,"merged_pull_requests_count":36,"bot_issues_count":0,"bot_pull_requests_count":3,"past_year_issues_count":0,"past_year_pull_requests_count":0,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":null,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":0,"past_year_pull_request_authors_count":0,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":null,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"created_at":"2023-12-13T00:16:07.436Z","updated_at":"2025-09-02T08:27:11.445Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/aodn%2Faodn-portal","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/aodn%2Faodn-portal/issues","issue_labels_count":{"bug":21,"T1 - IMOS":21,"T2 - O\u0026M - Continuous Improvement":20,"T3 Information Infrastructure":13,"1 Point":11,"T3 - Data Delivery":10,"in progress":8,"T3 - Unplanned":6,"refactor":5,"0 Points":5,"T2 - O\u0026M - Testing and Release":3,"blocked":2,"1/2 story point":2,"enhancement":1,"wont fix":1},"pull_request_labels_count":{"dependencies":3},"issue_author_associations_count":{"NONE":51,"CONTRIBUTOR":2},"pull_request_author_associations_count":{"CONTRIBUTOR":42,"NONE":6},"issue_authors":{"kereid":21,"Chetnamann":13,"evacougnon":10,"Abulos":2,"ocehugo":2,"jonescc":1,"jachope":1,"craigrose":1,"xhoenner":1,"vfisaac":1},"pull_request_authors":{"craigrose":11,"nspool":9,"akashisama":6,"digorgonzola":4,"utas-raymondng":4,"ndhogan":3,"dependabot[bot]":3,"lbesnard":2,"APaulic":2,"pmbohm":1,"jonescc":1,"ggalibert":1,"gsatimos":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2025-10-27T00:00:36.373Z","repositories_count":11206531,"issues_count":34875719,"pull_requests_count":113140909,"authors_count":11041697,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{},"past_year_pull_request_author_associations_count":{},"past_year_issue_authors":{},"past_year_pull_request_authors":{},"maintainers":[],"active_maintainers":[]},"events":{"total":{"IssueCommentEvent":2,"PullRequestEvent":1,"ForkEvent":1},"last_year":{"IssueCommentEvent":2,"PullRequestEvent":1,"ForkEvent":1}},"keywords":[],"dependencies":[{"ecosystem":"maven","filepath":"pom.xml","sha":null,"kind":"manifest","created_at":"2022-07-07T07:04:31.950Z","updated_at":"2022-07-07T07:04:31.950Z","repository_link":"https://github.com/aodn/aodn-portal/blob/master/pom.xml","dependencies":[{"id":110104042,"package_name":"hsqldb:hsqldb","ecosystem":"maven","requirements":"1.8.0.10","direct":true,"kind":"compile","optional":false},{"id":110104043,"package_name":"xerces:xercesImpl","ecosystem":"maven","requirements":"2.8.0","direct":true,"kind":"runtime","optional":false},{"id":110104022,"package_name":"org.grails:grails-dependencies","ecosystem":"maven","requirements":"2.4.4","direct":true,"kind":"runtime","optional":false},{"id":110104023,"package_name":"org.grails:grails-test","ecosystem":"maven","requirements":"2.4.4","direct":true,"kind":"test","optional":false},{"id":110104024,"package_name":"org.grails:grails-plugin-testing","ecosystem":"maven","requirements":"2.4.4","direct":true,"kind":"test","optional":false},{"id":110104025,"package_name":"junit:junit","ecosystem":"maven","requirements":"4.12","direct":true,"kind":"test","optional":false},{"id":110104026,"package_name":"org.spockframework:spock-core","ecosystem":"maven","requirements":"1.1-groovy-2.4","direct":true,"kind":"test","optional":false},{"id":110104027,"package_name":"com.h2database:h2","ecosystem":"maven","requirements":"1.3.170","direct":true,"kind":"runtime","optional":false},{"id":110104028,"package_name":"org.hibernate:hibernate-ehcache","ecosystem":"maven","requirements":"3.3.1.GA","direct":true,"kind":"compile","optional":false},{"id":110104029,"package_name":"commons-pool:commons-pool","ecosystem":"maven","requirements":"1.5.3","direct":true,"kind":"compile","optional":false},{"id":110104030,"package_name":"commons-codec:commons-codec","ecosystem":"maven","requirements":"1.3","direct":true,"kind":"compile","optional":false},{"id":110104031,"package_name":"javax.servlet:jstl","ecosystem":"maven","requirements":"1.1.2","direct":true,"kind":"compile","optional":false},{"id":110104032,"package_name":"org.codehaus.groovy.modules.http-builder:http-builder","ecosystem":"maven","requirements":"0.7","direct":true,"kind":"compile","optional":false},{"id":110104033,"package_name":"org.apache.httpcomponents:httpclient","ecosystem":"maven","requirements":"4.5.3","direct":true,"kind":"compile","optional":false},{"id":110104034,"package_name":"org.apache.tomcat:catalina","ecosystem":"maven","requirements":"6.0.32","direct":true,"kind":"compile","optional":false},{"id":110104035,"package_name":"org.tmatesoft:svn","ecosystem":"maven","requirements":"1.1.0","direct":true,"kind":"compile","optional":false},{"id":110104036,"package_name":"commons-collections:commons-collections","ecosystem":"maven","requirements":"3.2.1","direct":true,"kind":"compile","optional":false},{"id":110104037,"package_name":"net.sf.ehcache:ehcache-core","ecosystem":"maven","requirements":"1.7.1","direct":true,"kind":"compile","optional":false},{"id":110104038,"package_name":"taglibs:standard","ecosystem":"maven","requirements":"1.1.2","direct":true,"kind":"compile","optional":false},{"id":110104039,"package_name":"net.sf.opencsv:opencsv","ecosystem":"maven","requirements":"2.3","direct":true,"kind":"compile","optional":false},{"id":110104040,"package_name":"org.aspectj:aspectjweaver","ecosystem":"maven","requirements":"1.6.8","direct":true,"kind":"compile","optional":false},{"id":110104041,"package_name":"org.aspectj:aspectjrt","ecosystem":"maven","requirements":"1.6.8","direct":true,"kind":"compile","optional":false},{"id":110104044,"package_name":"net.sourceforge.nekohtml:nekohtml","ecosystem":"maven","requirements":"1.9.15","direct":true,"kind":"runtime","optional":false},{"id":110104045,"package_name":"org.slf4j:slf4j-log4j12","ecosystem":"maven","requirements":"1.7.5","direct":true,"kind":"runtime","optional":false},{"id":110104046,"package_name":"org.grails.plugins:simple-captcha","ecosystem":"maven","requirements":"1.0.0","direct":true,"kind":"compile","optional":false},{"id":110104047,"package_name":"org.grails.plugins:csv","ecosystem":"maven","requirements":"0.3.1","direct":true,"kind":"compile","optional":false},{"id":110104048,"package_name":"org.grails.plugins:tomcat","ecosystem":"maven","requirements":"7.0.54","direct":true,"kind":"provided","optional":false},{"id":110104049,"package_name":"org.grails.plugins:webxml","ecosystem":"maven","requirements":"1.4.1","direct":true,"kind":"runtime","optional":false},{"id":110104050,"package_name":"joda-time:joda-time","ecosystem":"maven","requirements":"1.5","direct":true,"kind":"compile","optional":false},{"id":110104051,"package_name":"org.ocpsoft.prettytime:prettytime","ecosystem":"maven","requirements":"3.2.7.Final","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"rubygems","filepath":"Gemfile","sha":null,"kind":"manifest","created_at":"2022-07-07T07:04:32.005Z","updated_at":"2022-07-07T07:04:32.005Z","repository_link":"https://github.com/aodn/aodn-portal/blob/master/Gemfile","dependencies":[{"id":110104061,"package_name":"guard","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":110104062,"package_name":"guard-livereload","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":110104063,"package_name":"json","ecosystem":"rubygems","requirements":"~\u003e 1.7.7","direct":true,"kind":"development","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/test.yml","sha":null,"kind":"manifest","created_at":"2023-01-12T01:45:15.975Z","updated_at":"2023-01-12T01:45:15.975Z","repository_link":"https://github.com/aodn/aodn-portal/blob/master/.github/workflows/test.yml","dependencies":[{"id":6872983455,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":6872983456,"package_name":"actions/setup-java","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":6872983457,"package_name":"actions/cache","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"docker","filepath":"Dockerfile","sha":null,"kind":"manifest","created_at":"2023-01-12T01:45:16.456Z","updated_at":"2023-01-12T01:45:16.456Z","repository_link":"https://github.com/aodn/aodn-portal/blob/master/Dockerfile","dependencies":[{"id":6872983458,"package_name":"ubuntu","ecosystem":"docker","requirements":"20.04","direct":true,"kind":"build","optional":false}]},{"ecosystem":"docker","filepath":"docker-compose.yml","sha":null,"kind":"manifest","created_at":"2023-01-12T01:45:16.832Z","updated_at":"2023-01-12T01:45:16.832Z","repository_link":"https://github.com/aodn/aodn-portal/blob/master/docker-compose.yml","dependencies":[{"id":6872983459,"package_name":"portal-build","ecosystem":"docker","requirements":"latest","direct":true,"kind":"runtime","optional":false}]}],"score":7.2661287795564515,"created_at":"2023-12-13T00:09:50.445Z","updated_at":"2026-04-08T02:30:52.114Z","avatar_url":"https://github.com/aodn.png","language":"JavaScript","category":"Hydrosphere","sub_category":"Ocean and Hydrology Data Access","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"AODN Open Geospatial Portal\n===========================\n\n[![Build Status](https://travis-ci.org/aodn/aodn-portal.png?branch=master)](https://travis-ci.org/aodn/aodn-portal)\n\nThe AODN open geospatial portal is a [Grails](http://grails.org/) application for discovering, subsetting, and downloading geospatial data.\n\nThe application is a stateless front end to other servers: \n\n* [GeoNetwork](http://geonetwork-opensource.org/) metadata catalog\n* [GeoServer](http://geoserver.org/) data server (WMS and WFS and our WPS subsetting and aggregation services\n* [THREDDS](http://thredds.aodn.org.au/thredds/) Gridded (ncWMS files) data server with embedded ncWMS (http://www.resc.rdg.ac.uk/trac/ncWMS/) web map server\n\nYou can view the portal in action at [AODN Portal](https://portal.aodn.org.au), which always runs the latest version of the code.\n\n## Contact\ninfo@aodn.org.au or see https://help.aodn.org.au/ .\n\n## Features\n* Easy 1-2-3 workflow (1.Search, 2.Subset, 3.Download)\n* Faceted search for easy discovery of data collections\n* Visualise subsetting results before download via WMS\n* Download data from a variety of web services (eg. WFS)\n* Configurable themes and splash page\n\n## Licensing\nThis project is licensed under the terms of the GNU GPLv3 license.\n## Getting Your Hands on Portal\n* [Building From Source](#building-from-source)\n* [Can I Get A Pre-Built War?](#can-i-get-a-pre-built-war)\n* [Installation](#installation)\n\n## [Building From Source](#building-from-source)\nIf you want to build from source you will need to have [Grails](http://grails.org/) 2.4.4 and JDK 1.8 installed on your \nbuild machine. The JDK needs to be Oracle, version 1.8.0_31 to use run-app.  Download\n`Java SE Development Kit 8u31` from https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html. \n\nThe recommended way of installing grails is by using [SdkMan](http://sdkman.io/):\n```\n$ curl -s http://get.sdkman.io | bash \n$ source $HOME/.sdkman/bin/sdkman-init.sh\n$ sdk install grails 2.4.4\n$ sdk use grails 2.4.4\n```\n\nAlternatively an archive of Grails 2.4.4 can be obtained from \n[s3://imos-binary/static/grails/](https://imos-binary.s3.ap-southeast-2.amazonaws.com/static/grails/grails-2.4.4.zip)\n\nOnce you have the source it should be as simple as ```$ grails war``` in the root folder where you have checked out portal\nthen deploy the war to your application server.\n\n## Can I Get A Pre-Built War?\nYes, you can download it from our [public binaries repo](http://binary.aodn.org.au/?prefix=jobs/portal_4_prod/).\n\n## Installation\nThe AODN Portal has been tested with Tomcat.  All you need to do is deploy the WAR and add a configuration file that tells the portal:\n* Where to find GeoNetwork\n* Your CSS for branding and styling\n* Trusted servers\n\nDefine the location of the configuration file by setting an environment context variable named ```aodn.configuration```\n\nOne way to do this is by adding a file called \u0026lt;context\u0026gt;.xml in the ```$CATALINA_BASE/conf/[enginename]/[hostname]/``` directory. Where \u0026lt;context\u0026gt; matches the context of the deployed WAR (eg. \"aodn-portal-3.42.1-production.xml\").  Set the variable by adding the following line to the file: \n```\u003cEnvironment name=\"aodn.configuration\" value=\"\u003cpath to file\u003e/Portal.groovy\" type=\"java.lang.String\" override=\"true\"/\u003e```\n\nThen add the file called ```Portal.groovy```\n\nYou can clone an example [here](https://github.com/aodn/aodn-portal/blob/master/grails-app/conf/Config.groovy) and modify as required. \n\n## Development with IntelliJ\n\nAlthough other versions may work the following assumes you have:\n\n* Ubuntu 20.04.3 LTS or 18.04.6 LTS\n* Latest IntelliJ IDEA Ultimate (2021.3.2 was used at time of writing). The Ultimate edition is required for Grails support.\n* Java OpenJDK 1.8\n\nThe Java JDK should normally be installed using a package manager suitable to your environment from \n[OpenJDK](https://openjdk.java.net/install/). Alternatively an archive can be downloaded from \n[s3://imos-binary/static/java](https://imos-binary.s3.ap-southeast-2.amazonaws.com/static/java/java-8-openjdk-amd64.tar.gz)\n\nRequirements:\n\n* Grails 2.4.4 (see [Building From Source](#building-from-source))\n\nConfigure IntelliJ:\n\nAccess Tools --\u003e Grails --\u003e Configure Grails SDK and set the project name and location to the Grails 2.4.4 SDK.\n\n![img.png](configure-grails-sdk.png)\n\nMake sure the correct JDK (Oracle OpenJDK 1.8.0_31) is selected in the Project Structure.\n\nDebugging:\n\nThe project includes a run configuration suitable for debugging ([Grails_aodn-portal.run.xml](.run/Grails_%20aodn-portal.run.xml)). \nSelect this from the run configurations list and click the debug button. This will run the application using the development\nconfiguration found in [Config.groovy](grails-app/conf/Config.groovy). A JDWP transport mechanism is accessible via\ndt_socket. \n\nGo to the IntelliJ debug panel and click on the Console tab. This will show the command line used to run the application\nalong with the address to which a debugger can be attached. To use the IntelliJ debugger, click the \"Attach debugger\" link.\n\n![attach-debugger.png](attach-debugger.png)\n\nTo view the full command line used to run the application click on the ellipsis. The command line will be something like\nthe following which is provided to aid troubleshooting. In particular note the paths to plugins and dependencies which\nare provided by IntelliJ.\n```\n/usr/lib/jvm/java-8-openjdk-amd64/bin/java \n    -agentlib:jdwp=transport=dt_socket,address=40253,suspend=y,server=y \n    -Dmaven.multiModuleProjectDirectory=/home/user/git/scratch/aodn-portal \n    -Dgrails.env=development \n    -Xmx1G -Xms512m \n    -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8008 -Dcom.sun.management.jmxremote.authenticate=false \n    -Dcom.sun.management.jmxremote.ssl=false -XX:+UnlockCommercialFeatures -XX:+FlightRecorder \n    -Dmaven.home=/home/user/.local/share/JetBrains/Toolbox/apps/IDEA-U/ch-0/213.6777.52/plugins/maven/lib/maven3 \n    -Dclassworlds.conf=/home/user/.local/share/JetBrains/Toolbox/apps/IDEA-U/ch-0/213.6777.52/plugins/maven/lib/maven3/bin/m2.conf \n    -Dmaven.ext.class.path=/home/user/.local/share/JetBrains/Toolbox/apps/IDEA-U/ch-0/213.6777.52/plugins/maven/lib/maven-event-listener.jar \n    -Dgrails.full.stacktrace=true \n    -javaagent:/home/user/.local/share/JetBrains/Toolbox/apps/IDEA-U/ch-0/213.6777.52/plugins/Groovy/lib/agent/gragent.jar \n    -javaagent:/home/user/.local/share/JetBrains/Toolbox/apps/IDEA-U/ch-0/213.6777.52/plugins/Grails/lib/grails-rt.jar \n    -DforkDebug=true \n    -javaagent:/home/user/.local/share/JetBrains/Toolbox/apps/IDEA-U/ch-0/213.6777.52/plugins/Groovy/lib/agent/gragent.jar \n    -javaagent:/home/user/.local/share/JetBrains/Toolbox/apps/IDEA-U/ch-0/213.6777.52/plugins/java/lib/rt/debugger-agent.jar \n    -Didea.grails.kind.file=/tmp/grailsStartFlag637409810572985153 \n    -Dfile.encoding=UTF-8 \n    -classpath /home/user/.local/share/JetBrains/Toolbox/apps/IDEA-U/ch-0/213.6777.52/plugins/maven/lib/maven3/boot/plexus-classworlds-2.6.0.jar:/home/user/.local/share/JetBrains/Toolbox/apps/IDEA-U/ch-0/213.6777.52/plugins/maven/lib/maven3/boot/plexus-classworlds.license:/home/user/.local/share/JetBrains/Toolbox/apps/IDEA-U/ch-0/213.6777.52/lib/idea_rt.jar \n    org.codehaus.classworlds.Launcher -Didea.version=2021.3.2 \n    grails:run-app\n```\n\nAfter a brief pause the Portal UI will run in your default browser at http://localhost:8080. Two processes will be listed\nin the IntelliJ \"Stop Process\" menu. Now you can set breakpoints and use other IntelliJ debug functions.\n\nThe provided run configuration also includes Java JVM options which enable monitoring via JConsole on port 8008.\n\n## Development with Docker\n\n### SSL/TLS\n\nBefore you can properly run the application in a docker container you will need to add trusted certificates to the JVM running\nin the Docker container. These are used to access the configured Geonetwork and Geoserver instances. This is no different \nto running in a local environment so all you will need to do is to make sure that there is a copy of your trusted certificates\nstore in a file called `cacerts` located in the aodn-portal directory. The dockerfile will take care of copying this to \nthe correct location on the container.\n\nLocate your `cacerts` file in the `jre/lib/security` directory of your JDK and copy it to your aodn-portal root directory.\nFor more information on adding required certificates to this file see [stack overflow](https://stackoverflow.com/questions/21076179/pkix-path-building-failed-and-unable-to-find-valid-certification-path-to-requ).\n\n### Docker-compose\n\nThe `docker-compose.yml` file includes a service 'debug'. This will run the app in a Docker container with the JDWP \ntransport mechanism watching on port 5005:\n\n`$ docker-compose up debug`\n\nAlternatively use the Remote debug run configuration`.run/docker-compose.yml.debug_ Compose Deployment.run.xml` in \nIntelliJ.\n\n### Attaching a debugger\n\nAttaching your debugger to the JDWP transport port will depend on your IDE. In IntelliJ you can use the provided `Remote debug` run\nconfiguration by selecting it in the dropdown and clicking the debug button.\n\nDocker development assumes the localhost ports 8080 and 5005 are available.  \n\nGrails does not complete launching the application until after you have connected your debugger to the JDWP port. Once it\nis launched the application will be available on http://localhost:8080.\n\n## Troubleshooting\n\nIf you have difficulties building and running make sure you are using the correct JDK and version of Grails. Then run\n`grails clean` and try again.\n\n## Getting Started (How Do I Drive This Thing?)\nRead the [Getting Started guide](https://github.com/aodn/aodn-portal/wiki/Getting-Started) on the wiki\n\n## Contributing\nWe welcome contributions so please feel free to fork the project, address any issues or add features and submit\na pull request.\n\n\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":[],"project_url":"https://ost.ecosyste.ms/api/v1/projects/152769","html_url":"https://ost.ecosyste.ms/projects/152769"}