Hi all guys, I took advantage from today that's been a vacation day here to play and experiment a little a new cocoon application I proposed time ago, called cocoon-cli. I had a private conversation with Cedri Beust, the author of JCommander, that gave me a little suggestion how to NOT make a CLI application :P
So, what I did today is replicating the Apache Ant/Maven behavior, I mean, cocoon-cli is a console application that takes in input an XML pipeline descriptor - called c3p.xml by default - that looks like very similar to ant build.xml file: {code} <pipelines name="Cocoon Pipelines test" default="id0"> <pipeline id="id0"> <generator src="${user.dir}/src/test/resources/missing-elements.xml" /> <serializer /> </pipeline> <pipeline id="id1"> <generator src="${user.dir}/src/test/resources/missing-elements.xml" /> <serializer /> </pipeline> </pipelines> {code} as you can see, it reminds the Ant build XML format, <pipeline> elements can be associated, as concept, to <target>s, each pipeline has an id (and an optional description) and the user can specify a default one has to be executed if no specific one (or more) are specified in the CLI. Note that it supports the ${} variables, both Environment and System Properties. Available commands are: {code} Usage: c3pipe [options] <pipeline IDs>*. Options: -X, --debug Produce execution debug output. Default: false -f, --file Force the use of an alternate c3p file. Default: /Users/simonetripodi/Documents/workspace/cocoon-root/cocoon-cli/target/cocoon-cli-3.0.0-beta-1-SNAPSHOT/c3p.xml -h, --help Display help information. Default: false -p, --pipeshelp Print pipelines help information. Default: false -v, --version Display version information. Default: false {code} typing `-p`, like Ant, enlists the available pipelines in the actual descriptor: {code} $ c3pipe -p [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Apache Cocoon 3 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] Apache Cocoon 3 - Pipeline 'Cocoon Pipelines test' (default: id0) [INFO] id0 (non-caching) - Description not available [INFO] id1 (non-caching) - Description not available [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Apache Cocoon 3 SUCCESS [INFO] Total time: 0s [INFO] Finished at: Tue Nov 01 20:58:48 CET 2011 [INFO] Final Memory: 10M/493M [INFO] ------------------------------------------------------------------------ {code} when executing one (or more) pipeline(s), it prints the output in the sysout {code} [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Apache Cocoon 3 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] Executing default Pipeline 'id0' <?xml version="1.0" encoding="UTF-8"?><!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --><!-- $Id: missing-elements.xml 1195964 2011-11-01 12:40:02Z simonetripodi $ --><pipelines xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Valid Pipeline" default="id0"> <pipeline id="id0"/> </pipelines>[INFO] Default pipeline 'id0' executed [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Apache Cocoon 3 SUCCESS [INFO] Total time: 0s [INFO] Finished at: Tue Nov 01 21:08:35 CET 2011 [INFO] Final Memory: 13M/493M [INFO] ------------------------------------------------------------------------ {code} To package it, it is enough launching `mvn package` under /cocoon-cli[1], its execution will produce .tar.gaz and .zip packages under /cocoon-cli/target, that contain a multi-platform application which directories tree looks like the Maven one: . ├── README ├── bin │ ├── c3pipe │ └── c3pipe.bat ├── lib ├── cocoon-cli-3.0.0-beta-1-SNAPSHOT.jar ├── cocoon-pipeline-3.0.0-beta-1-SNAPSHOT.jar ├── cocoon-sax-3.0.0-beta-1-SNAPSHOT.jar ├── cocoon-util-3.0.0-beta-1-SNAPSHOT.jar ├── cocoon-xml-2.0.2.jar ├── commons-beanutils-1.8.3.jar ├── commons-digester3-3.1.jar ├── jcl-over-slf4j-1.6.1.jar ├── jcommander-1.17.jar ├── logback-classic-0.9.29.jar ├── logback-core-0.9.29.jar └── slf4j-api-1.6.1.jar TODOs: 1) the XSchema is incomplete and doesn't support yet all the components we have (optionals included); 2) consequence of 1), the XML parser doesn't ingest all the components; 3) adding a way to serialize the output to files instead of sysout only; 4) passing more properties using the -D option in the CLI; 5) adding a debugger support, ATM the debug option doesn't produce useful results; 6) during packaging, properties on filtered resources are not correctly expanded; 7) ... WDYT? Feedbacks are needed and of course participation is open, everybody interested is welcome! :) All the best, have a nice day!!! Simo [1] https://svn.apache.org/repos/asf/cocoon/cocoon3/trunk/cocoon-cli http://people.apache.org/~simonetripodi/ http://simonetripodi.livejournal.com/ http://twitter.com/simonetripodi http://www.99soft.org/