From efc4d4720bcf7a0e76e2196513ec73a53e58f999 Mon Sep 17 00:00:00 2001 From: Ben Soares Date: Tue, 22 Oct 2019 17:38:56 +0100 Subject: [PATCH] JAL-3210 Better integration with Eclipse as IDE. FIXED THE TEST JAR ATTRIBUTE, HOORAH --- .gitignore | 2 +- README_GRADLE_JALVIEWJS-2019-10-22.md | 23 ++++++++- build.gradle | 83 +++++++++++++++++---------------- 3 files changed, 66 insertions(+), 42 deletions(-) diff --git a/.gitignore b/.gitignore index c78ace4..9c0d393 100644 --- a/.gitignore +++ b/.gitignore @@ -32,4 +32,4 @@ TESTNG /doc/building.html /.j2s /template.html - +/jalviewjsTest.html diff --git a/README_GRADLE_JALVIEWJS-2019-10-22.md b/README_GRADLE_JALVIEWJS-2019-10-22.md index 34e682b..9aaf9d0 100644 --- a/README_GRADLE_JALVIEWJS-2019-10-22.md +++ b/README_GRADLE_JALVIEWJS-2019-10-22.md @@ -42,7 +42,7 @@ gradle jalviewjsSiteTar # will produce build/distribution/site.tar.gz gradle jalviewjsTranspile # should run a new eclipse compile+transpile -gradle jalviewjsServerStart # will run a localhost http server to allow you to test the site in a browser. Just use the URL given in the output. To stop the server you have to do gradle --stop or you can just leave it running until the gradle daemon dies. +gradle jalviewjsServer # will run a localhost http server to allow you to test the site in a browser. Just use the URL given in the output. To stop the server you have to do gradle --stop or you can just leave it running until the gradle daemon dies. ``` If it's working okay, you just need to to @@ -55,6 +55,8 @@ and go to the localhost URL in the output of the jalviewjsServer task in your we # IN ECLIPSE +## Setting up + If you are developing in Eclipse as IDE (which is the natural way to use Eclipse!) and have the plugin installed, then you will obviously not need to run the transpile as a gradle task -- it will be performed automatically. Some things to remember: @@ -67,4 +69,23 @@ to create clean jalview `.classpath, .project, .settings/org.eclipse.jdt.core.pr You should only need to do this once. Be aware that manual changes to these files will likely be overwritten during some gradle tasks. +If your Eclipse IDE doesn't already have the `net.sf.j2s.core.jar` plugin, you can run on CLI +``` +gradle jalviewjsEclipseCopyDropins -Pjalviewjs_eclipse_root=/Applications +``` +(replacing `/Applications` with the folder where your IDE Eclipse is installed). +You should also only need to do this once but you will have to restart Eclipse if it was already running. + +## Building site + +The important gradle tasks needed to build and test the site have been adapted/duplicated into the _jalview in eclipse_ group of tasks which you can find in the _Gradle Tasks_ window/tab. + +To build the site, your Eclipse should be creating the transpilation continuously into `build/jalviewjs/tmp/site`. If there are no transpiled files then you should Refresh, Gradle->Refresh Gradle Project, and if nothing has appeared you can Project->Clean which should trigger a rebuild. + +You can clean the transpiled code with the gradle task `cleanJalviewjsIDESite`. + +To then create the site from the transpiled code and supporting libraries, run the gradle task `jalviewjsIDEBuildSite` which will create a working (hopefully) site in `build/jalviewjs/site` + +You can test the build right here in Eclipse, or in a browser of your choice, by running the `jalviewjsIDEServer` task (which is really just the `jalviewjsServer` task). That will start a localhost server and create an access HTML file, `jalviewjsTest.html`. +You can open that in the Eclipse Internal Web Browser (you might need to Refresh the project to see it the first time you run the server task) by right clicking and Open With...->Web Browser, or you can open the file in your own web browser such as Firefox. diff --git a/build.gradle b/build.gradle index 9b7b171..0c2448c 100644 --- a/build.gradle +++ b/build.gradle @@ -389,11 +389,7 @@ eclipse { // don't duplicate } else { def lib = new Library(fileReference(itPath)) - /* this doesn't work... yet. Adding test=true attribute using withXml below - def attrs = new Node(null, 'attributes') - attrs.appendNode('attribute', ["name":"test","value":"true"]) - lib.appendNode(attrs) - /**/ + lib.entryAttributes["test"] = "true" cp.entries += lib alreadyAddedLibPath.put(itPath, true) } @@ -401,38 +397,6 @@ eclipse { } // whenMerged - // withXml changes ignored by buildship, these add the "test=true" attribute - withXml { - def node = it.asNode() - - def srcTestAttributes - node.children().each{ cpe -> - def attributes = cpe.attributes() - if (attributes.get("kind") == "src" && attributes.get("path") == "test") { - srcTestAttributes = cpe.find { a -> a.name() == "attributes" } - return - } - } - def addTestAttribute = true - srcTestAttributes.each{a -> - if (a.name() == "attribute" && a.attributes().getAt("name") == "test") { - addTestAttribute = false - } - } - if (addTestAttribute) { - srcTestAttributes.append(new Node(null, "attribute", [name:"test", value:"true"])) - } - - node.children().each{ cpe -> - def attributes = cpe.attributes() - if (attributes.get("kind") == "lib" && attributes.get("path").startsWith("utils/")) { - cpe.appendNode('attributes') - .appendNode('attribute', [name:"test", value:"true"]) - } - } - } // withXML - - } // file containers 'org.eclipse.buildship.core.gradleclasspathcontainer' @@ -1288,7 +1252,7 @@ task jalviewjsSetEclipseWorkspace { eclipseWsDir = propVal } if (( eclipseWsDir == null || !file(eclipseWsDir).exists() ) && file(propsFileName).exists()) { - def ins = new FileInputStream(propsFileName) + def ins = new FileInputStream("${jalviewDirAbsolutePath}/${propsFileName}") props.load(ins) ins.close() if (props.getProperty(propKey, null) != null) { @@ -1571,6 +1535,11 @@ task jalviewjsBuildSite { dependsOn jalviewjsPrepareSite } +task cleanJalviewjsSite { + delete jalviewjsTransferSiteDir + delete jalviewjsSiteDir +} + task jalviewjsSiteTar(type: Tar) { group "JalviewJS" description "Creates a tar.gz file for the website" @@ -1594,20 +1563,29 @@ task jalviewjsServer { group "JalviewJS" description "Starts a webserver on localhost to test the website" dependsOn jalviewjsSitePath + def htmlFile = "${jalviewDirAbsolutePath}/jalviewjsTest.html" doLast { SimpleHttpFileServerFactory factory = new SimpleHttpFileServerFactory() def port = Integer.valueOf(jalviewjs_server_port) def start = port def running = false + def url while(port < start+1000 && !running) { try { def doc_root = new File(jalviewDirAbsolutePath +"/"+ jalviewjsSiteDir) jalviewjsServer = factory.start(doc_root, port) running = true + url = jalviewjsServer.getResourceUrl(jalviewjs_server_resource) println("SERVER STARTED with document root ${doc_root}.") - println("Go to "+jalviewjsServer.getResourceUrl(jalviewjs_server_resource)+" . Run gradle --stop to stop (kills all gradle daemons).") - println("For debug: "+jalviewjsServer.getResourceUrl(jalviewjs_server_resource)+"?j2sdebug") + println("Go to "+url+" . Run gradle --stop to stop (kills all gradle daemons).") + println("For debug: "+url+"?j2sdebug") + + file(htmlFile).text = """ +

Jalview JS Test. <${url}>

+

Jalview JS Test with debug. <${url}?j2sdebug<

+ """ + } catch (Exception e) { port++; } @@ -1615,6 +1593,7 @@ task jalviewjsServer { } + outputs.file(htmlFile) } task jalviewjs { @@ -1624,3 +1603,27 @@ task jalviewjs { } +task jalviewjsIDECopyTransferSite(type: Copy) { + from jalviewjsTransferSiteDir + into jalviewjsSiteDir +} + +task jalviewjsIDEBuildSite { + group "JalviewJS in Eclipse" + description "Copies the Eclipse transpiled site and unzips supporting zipfiles" + dependsOn jalviewjsIDECopyTransferSite + dependsOn jalviewjsPrepareSite +} + +task cleanJalviewjsIDESite { + group "JalviewJS in Eclipse" + description "Deletes the Eclipse transpiled site" + dependsOn cleanJalviewjsSite +} + +task jalviewjsIDEServer { + group "JalviewJS in Eclipse" + description "Starts a webserver on localhost to test the website" + dependsOn jalviewjsServer +} + -- 1.7.10.2