{"id":19065616,"url":"https://github.com/caiorss/jarget","last_synced_at":"2026-04-15T12:35:03.464Z","repository":{"id":90043161,"uuid":"100176573","full_name":"caiorss/jarget","owner":"caiorss","description":"Jarget - Toolbox for Java Platform to build uber jars, get information about jar files and download jars libraries from Maven Central.","archived":false,"fork":false,"pushed_at":"2018-06-08T14:35:39.000Z","size":14739,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-01-02T14:15:19.469Z","etag":null,"topics":["automation","cli","download","fatjar","jar","java","library","manager","scala","tool","toolbox","uber","uberjar","utility"],"latest_commit_sha":null,"homepage":"https://caiorss.github.io/jarget/","language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/caiorss.png","metadata":{"files":{"readme":"README.org","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"publiccode":null,"codemeta":null}},"created_at":"2017-08-13T12:55:34.000Z","updated_at":"2024-06-17T03:40:13.000Z","dependencies_parsed_at":null,"dependency_job_id":"5fc620c0-8962-42cc-af5f-fb1dec95336b","html_url":"https://github.com/caiorss/jarget","commit_stats":null,"previous_names":[],"tags_count":28,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/caiorss%2Fjarget","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/caiorss%2Fjarget/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/caiorss%2Fjarget/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/caiorss%2Fjarget/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/caiorss","download_url":"https://codeload.github.com/caiorss/jarget/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240118430,"owners_count":19750491,"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","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"}},"keywords":["automation","cli","download","fatjar","jar","java","library","manager","scala","tool","toolbox","uber","uberjar","utility"],"created_at":"2024-11-09T00:51:21.751Z","updated_at":"2026-04-15T12:34:58.435Z","avatar_url":"https://github.com/caiorss.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"#+TITLE:  Jarget - Command Line Toolbox for Java Platform \n#+AUTHOR:   Caio Rodrigues - caiorss.rodrigues@gmail.com \n#+DESCRIPTION: Command line toolbox for java platform, scala automation and dependency manager. \n#+KEYWORDS: jarget jar tool java scala automation deployment toolbox uber fatjar \n#+STARTUP: content\n\n#+HTML_HEAD: \u003cmeta name=\"viewport\" content=\"width=device-width, minimum-scale=1.0, maximum-scale=1.0\" /\u003e\n#+HTML_HEAD: \u003clink href=\"theme/org-nav-theme.css\" rel=\"stylesheet\"\u003e\n#+HTML_HEAD: \u003cscript src=\"theme/org-nav-theme.js\"\u003e\u003c/script\u003e\n\n* Jarget \n** Overview \n\nJarget is a command line application to download java libraries or jar\nfiles from Maven Central in a easy and fast way without the need to\nset up a project. It is useful to experiment java libraries with\nlanguages hosted in JVM such as Jython (Python implemented in Java),\nScala or Clojure. \n\n - [[https://github.com/caiorss/jarget/][Jarget Repository]]\n\n - [[https://caiorss.github.io/jarget][Jarget Website]]\n\n*Features:* \n\n + Download Scala and Java libraries from https://mvnrepository.com/\n   without creating a project. It is useful for quick experiments and\n   library evaluation.\n\n + Display information about Java packages.\n\n + Start Scala with all jar files from directory loaded in Classpath.\n\n + Run scala compiler with all jars from some directory in classpath.\n\n + Parallallel download of dependencies.\n\n + Inspect and extract data from jar files.\n\n   + Show MANIFEST\n\n   + Display files\n\n   + Show assets\n\n   + Extract files \n\n + Build uber jar, jar file bundled with all dependencies making\n   deployment and distribution easier.\n\n + Build self-exectutable *nix uber jar file that can be run with ./application\n\n** Use Case Example \n\nEvaluation of Scala cats library, based on [[https://medium.com/@abu_nadhr/scala-cats-library-for-dummies-part-1-8ec47af7a144][Scala Cats library for dummies — part 1]]\n\nJarget allows evaluation of Scala libraries without the need to\ncreate a project or complicated Maven directory structure. \n\nInstead of creating a SBT project with:\n\n#+BEGIN_SRC text\nlibraryDependencies += \"org.typelevel\" %% \"cats\" % \"0.7.2\"\n#+END_SRC\n\nIt is possible to: \n\n 1. Get information about the library. Note: 2.11 is the Scala version.\n\n#+BEGIN_SRC sh \n$ jarget mvn-show org.typelevel/cats_2.11/0.7.2\nPackage:         catsJVM\nPackaging:       jar\nCoordinates[1]:  group = org.typelevel artifact = cats_2.11 version = 0.7.2\nCoordinates[2]:  org.typelevel/cats_2.11/0.7.2\nUrl:             https://github.com/typelevel/cats\nDescription:     catsJVM\n\nDependencies:\n\n  - org.scala-lang/scala-library/2.11.8\n\n  - org.typelevel/cats-macros_2.11/0.7.2\n\n  - org.typelevel/cats-kernel_2.11/0.7.2\n\n  - org.typelevel/cats-kernel-laws_2.11/0.7.2\n\n  - org.typelevel/cats-core_2.11/0.7.2\n\n  - org.typelevel/cats-laws_2.11/0.7.2\n\n  - org.typelevel/cats-free_2.11/0.7.2\n\n  - org.typelevel/cats-jvm_2.11/0.7.2\n\n  - com.github.mpilquist/simulacrum_2.11/0.8.0\n\n  - org.typelevel/machinist_2.11/0.4.1\n\n#+END_SRC\n\n 2. Install it and run with: \n\nLoad Scala REPL with all jars from ./lib in classpath and test the\npackage: \n\n#+BEGIN_SRC sh \n$ jarget exec -p=org.typelevel/cats-core_2.12/0.9.0 -- scala \nWelcome to Scala 2.12.3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_144).\nType in expressions for evaluation. Or try :help.\n\nscala\u003e \nscala\u003e import cats._, cats.instances.all._ \nimport cats._\nimport cats.instances.all._\n\nscala\u003e val len: String =\u003e Int = _.length\nlen: String =\u003e Int = $$Lambda$1089/1057262726@255d9277\n\nscala\u003e Functor[List].map(List(\"scala\", \"cats\")) (len)\nres0: List[Int] = List(5, 4)\n\nscala\u003e \n\n#+END_SRC\n\n** TODO Tasks \n\n - [ ]  - Add search in console feature.  \n - [X]  - Add search in browser feature.\n - [X]  - Add package cache \n - [ ]  - Show all versions of a given package available in the repository.\n - [ ]  - Support multiple repositories. \n - [ ]  - Support project configuration file. \n - [X]  - Improve command line handling \n - [X]  - Improve error handling. \n - [X]  - Feature to make Uber Jar \n - [X]  - Shrink the generated uber jar using Pro-guard. \n - [X]  - Create a Windows exe wrapper\n - [X]  - Crypto Hash commands such as md5sum, sha256sum ... \n - [X]  - Improve project's web site design.\n\n** Building Instructions \n*** Build Standalone app \n\nBuild a standalone jarget by running \n\n - =$ make sh= \n\n#+BEGIN_SRC sh \n# Build \n$ make sh\nscala jarget.jar uber -scala -sh -o bin/jarget -m jarget.jar -j /home/archbox/opt/scala/lib/scala-xml_2.12-1.0.6.jar\nBuilt file:  bin/jarget ok\nRun it with: $ java -jar bin/jarget\n\n# Run it with \n$ ./bin/jarget \n\n# Or run it with \n$ java -jar bin/jarget\n\n# Or run it with \n$ sh ./bin/jarget doc\n\n#+END_SRC\n\n*** Build standalone app and shrink its size with proguard\n\nBuild a standalone jarget redeucing the app size with proguard. \n\n - $ make pgd-unix \n\n#+BEGIN_SRC sh\n  # Build \n  $ make pgd-unix -k CC=scalac\n\n  Makefile:63: warning: overriding recipe for target 'bin/jarget'\n  Makefile:58: warning: ignoring old recipe for target 'bin/jarget'\n  scalac src/logger.scala src/main.scala src/mvn.scala src/utils.scala src/reader.scala src/utils.JarBuilder.scala src/optPa\n  rser.scala src/crypto.scala -d jarget.jar\n  warning: there were 6 deprecation warnings (since 2.12.0); re-run with -deprecation for details\n  warning: there were 5 feature warnings; re-run with -feature for details\n  two warnings found\n  mkdir -p bin\n  cp -v exeLoaders/loaderCLI.exe exeLoaders/loaderGUI.exe assets || true\n  'exeLoaders/loaderCLI.exe' -\u003e 'assets/loaderCLI.exe'\n  'exeLoaders/loaderGUI.exe' -\u003e 'assets/loaderGUI.exe'\n  scala jarget.jar uber -scala -r=assets -o=bin/jarget-uber.jar jarget.jar /home/archbox/opt/scala/lib/scala-xml_2.12-1.0.6.\n  jar\n  java -jar proguard.jar @config.pro\n  ProGuard, version 5.3.3\n  Reading input...\n  Reading program jar [/home/archbox/Documents/projects/jarget.scala/bin/jarget-uber.jar]\n  Reading library jar [/home/archbox/opt/java/jre/lib/rt.jar]\n  Initializing...\n\n  ... .... ...\n\n    Final number of program classes:    1123\n  Inlining subroutines...\n  Preverifying...\n  Writing output...\n  Preparing output jar [/home/archbox/Documents/projects/jarget.scala/bin/jarget-pro.jar]\n    Copying resources from program jar [/home/archbox/Documents/projects/jarget.scala/bin/jarget-uber.jar]\n  rm -rf bin/jarget-uber.jar\n  scala jarget.jar jar-to-exe -exe=uexe bin/jarget-pro.jar bin/jarget\n  Built file ./bin/jarget-pro\n\n\n#+END_SRC\n\n*** Install jarget tool in ~/bin \n\n - make pgd-unix -k CC=scalac \u0026\u0026 make install\n** Getting a Binary Release \n\nAn fat-jar executable binary release can be downloaded from this link:\n\n - Most update Snapshot [[https://github.com/caiorss/jarget/raw/gh-pages/jarget][jarget Download]]\n\n - Release [[https://github.com/caiorss/jarget/raw/v1.0-release/jarget][jarget v1.0]]\n\n - Release [[https://github.com/caiorss/jarget/raw/v1.1-release/jarget][jarget v1.1]]\n\n - Release [[https://github.com/caiorss/jarget/raw/v1.2-release/jarget][jarget v1.2]]\n\n - Release [[https://github.com/caiorss/jarget/raw/v1.3-release/jarget][jarget v1.3]]\n\n - Release [[https://github.com/caiorss/jarget/raw/v1.3.1-release/jarget][jarget v1.3.1]]\n\n - Release [[https://github.com/caiorss/jarget/raw/v1.3.2-release/jarget][jarget v1.3.2]]\n\n - Release [[https://github.com/caiorss/jarget/raw/v1.4-release/jarget][jarget v1.4.0]] (5.7 MB)\n\nFrom version \u003e= 1.5 jarget will be shrunk with proguard.\n\n - Release [[https://github.com/caiorss/jarget/raw/v1.5-release/jarget][jarget v1.5.0]] (1.7 MB)\n\n - Release [[https://github.com/caiorss/jarget/raw/v1.5.1-release/jarget][jarget v1.5.1]] \n\n - Release [[https://github.com/caiorss/jarget/raw/v2.0-beta-release/jarget][jarget v2.0-beta]]   - Added pacakge caching feature.\n\n - Release [[https://github.com/caiorss/jarget/raw/v2.0.1-beta/jarget][jarget v2.0.1-beta]] - Allows scripting with dependencies (maven coordinates).\n\n - Release [[https://github.com/caiorss/jarget/raw/v2.1.0-beta-release/jarget][jarget v2.1.0-beta]] - Uber-jars can be built with maven\n   coordinates specifications and added more examples to\n   documentation.\n\n - Release [[https://github.com/caiorss/jarget/raw/v2.0.2-beta-release/jarget][jarget-v2.2.0-beta]] - Fixed uber-jars shell script header\n   edge-case bug and also added command jarget utils -info to show\n   platform informations such as number of processors, version of\n   operating system, default line separator '\\r', '\\n', '\\r\\n', path\n   separator and so on.\n\n - Release [[https://github.com/caiorss/jarget/blob/554a56e4bcc42d3b8fa3ce134bf7f0984f9e1701/jarget?raw%3Dtrue][jarget-v3.0]]\n\n   + Improved command line handling allowing future scalability and\n     implementation of new functionalities.\n\n   + Improved user interface. Now jarget has git-like\n     subcommands. Each command works as it was a separated command\n     line application in similar fashion to git and busybox.\n\n   + Implemented generation of uber jars embedded in Windows' native\n     executables. - (Still experimental.)\n\n - Release [[https://github.com/caiorss/jarget/blob/e8ad0cf55d8831ba9f87d65d0f912bcd8f19f30b/jarget?raw%3Dtrue][jarget-v3.2]]\n\n   + Enhance commnand line help readability.\n\n   + Add commands jarget run\n\n   + Added more command examples in the sub-commands help.\n\n   + Add command jarget mvn-run-jar - to run standalone jar file from\n     cache downloading it if not available yet. It allows to run\n     proguard, rhino javascript engine, clojure and so on.\n\n   + Add command jarget mvn-run-cls - to run main class of java\n     package. It is similar to mvn-run-jar, but mvn-run-cls is useful\n     to run jars with multiple entry points (main classes).\n\n - Release: [[https://github.com/caiorss/jarget/blob/d9913b519220d9237bcf1eab7826b00f078bc7dd/jarget?raw%3Dtrue][jarget-v4.0]]\n   + Improve command line handling.\n   + Create build automation feature - to build project from\n     configuration file. \n\nOr it can be downloaded with those shell commands below: \n\n#+BEGIN_SRC sh\n$ curl -O -L https://github.com/caiorss/jarget/raw/gh-pages/jarget\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n100   130  100   130    0     0     28      0  0:00:04  0:00:04 --:--:--    32\n100 5675k  100 5675k    0     0   490k      0  0:00:11  0:00:11 --:--:-- 1011k\n\n$ chmod +x jarget\n\n$ ./jarget \njarget - Tool to download jar packages.\n\n -show [package]                 - Show package's information\n\n -pom  [package]                 - Show package's pom file\n\n... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... \n#+END_SRC\n\nOr \n\n#+BEGIN_SRC sh \n$ curl -O -L https://github.com/caiorss/jarget/raw/gh-pages/jarget \u0026\u0026 chmod +x jarget \u0026\u0026 ./jarget \n#+END_SRC\n\nOn Windows the application can be executed with: \n\n#+BEGIN_SRC sh \n  $ java -jar jarget\n\n   Jarget 3.2 - command line toolbox for Scala and the Java Platform.\n\n  Usage: $  [COMMAND] [OPTIONS] [\u003cARGS\u003e ...]\n\n  Commands:\n\n\n  [Main Commands]\n\n    uber               Build uber jar file for deployment by bundling dependencies and resource files.\n    exec               Execute a shell command and pass -cp \u003cCLASSPATH\u003e of packages downloaded to it.\n    script             Run a scala script with a given set of packages from cache.\n    scala              Run Scala REPL (scala) passing the class of packages from the repository.\n    run                Run a main class from a set of jar file passing the classpath of packages in repository.\n\n  ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... \n#+END_SRC\n   \nOn the Windows Operating Systems, the app can also be installed by\nrunning the commands below in the cmd.exe shell:\n\n - Step 1 - Add ~/bin directory in $PATH variable. \n\n#+BEGIN_SRC sh \n# Create directory ~/bin or C:\\Users\\\u003cuser\u003e\\bin \nC:\\Users\\archbox\u003e mkdir %USERPROFILE%\\bin\n\n# Add bin directory in $PATH variable \nsetx PATH=%PATH%;%USERPROFILE%\\bin\n#+END_SRC\n\n - Step 2 - Copy jarget to ~C:\\Users\\\u003cuser\u003e\\bin~\n\n - Step 3 - Create a batch script to load the app at this directory,\n   named jarget.bat with the contents below.\n\nFile: jarget.bat\n\n#+BEGIN_SRC sh \n  @echo off\n  java -jar %~dp0\\jarget %*\n  exit /b \n#+END_SRC\n\n - Step 4 - Open another cmd.exe shell to test. After typing $ jarget,\n   it will show the user help below:\n\n#+BEGIN_SRC sh \n  Microsoft Windows [Version 10.0.16299.371]\n  (c) 2017 Microsoft Corporation. All rights reserved.\n\n  C:\\Users\\archbox\u003e jarget\n\n   Jarget 3.2 - command line toolbox for Scala and the Java Platform.\n\n  Usage: $  [COMMAND] [OPTIONS] [\u003cARGS\u003e ...]\n\n  Commands:\n\n\n  C:\\Users\\archbox\u003e\n  C:\\Users\\archbox\u003ejarget.bat\n\n   Jarget 3.2 - command line toolbox for Scala and the Java Platform.\n\n  Usage: $  [COMMAND] [OPTIONS] [\u003cARGS\u003e ...]\n\n  Commands:\n\n\n  C:\\Users\\archbox\u003e where jarget\n  C:\\Users\\archbox\\bin\\jarget.bat\n\n#+END_SRC\n\n* User Guide\n** Info commands\n\nNow the app adopts git subcommands:\n\n - =$ jarget=\n\n#+BEGIN_SRC text \n  $ jarget\n  jarget v4.0 - command line toolbox for Scala and the Java Platform.\n  Usage: $ jarget [COMMAND] [OPTIONS] [\u003cARGS\u003e ...]\n\n  Commands:\n\n\n  [Main Commands]\n\n    uber                  Build uber jar file for deployment by bundling dependencies and resource files.\n    exec                  Execute a shell command and pass -cp \u003cCLASSPATH\u003e of packages downloaded to it.\n    script                Run a scala script with a given set of packages from cache.\n    scala                 Run Scala REPL (scala) passing the class of packages from the repository.\n    run                   Run a main class from a set of jar file passing the classpath of packages in repository.\n\n  [Mvn Commands]\n\n    mvn-show              Show package's information.\n    mvn-search            Search for a package at the site https://mvnrepository.com\n    mvn-doc               Open package documentation in the web browser.\n    mvn-run-jar           Run main method of executable jar package in repository.\n    mvn-run-cls           Run a main class of a java package (class with main static method).\n    mvn-pom               Show package's pom.xml file.\n    mvn-pull              Download package to cache directory.\n    mvn-copy              Copy jar packages from cache directory to ./lib downloading them if not available.\n    cache                 Show packages in cache directory.\n\n  [Jar Commands]\n\n    jar-to-exe            Embed Uber jar into Unix executable or Windows Executable (experimental).\n    jar-man               Show manifest of a jar file.\n    jar-main-class        Show main class of a jar file.\n    jar-ls                Show contents of a jar file.\n    jar-rs                Show resources of a jar file ignoring *.class files.\n    jar-cat               Show content of a file in a jar package.\n    jar-ex                Extract \u003cfile\u003e from jar file \u003cFILE.jar\u003e to current directory.\n\n  [Project Commands]\n\n    pj-show               Show project configuration\n    pj-make               Create development build.\n    pj-run                Run development build, compiling it if out of sync with sources.\n    pj-release            Compile project building uber jar in executable wrapper.\n\n  [Misc Commands]\n\n    utils                 General utilities helpers for platform information and debugging.\n    digest-s              Compute crypto hash of string. - Algorithm: [md5 | sha1 | sha256 ]\n    digest-f              Compute crypto hash of a file. - Algorithm: [md5 | sha1 | sha256 ]\n\n\n#+END_SRC\n\nEach sub-command has its own help: \n\n - Example: subcommand uber to build uber jars.\n\n#+BEGIN_SRC sh \n  $ jarget uber\n  Build uber jar file for deployment by bundling dependencies and resource files.\n\n\n      Note - \u003cEXE\u003e can be:\n        + empty - (default) for jar file without any executable wrapper.\n        + uexe  - for Unix executable - Shell script with embedded uber-jar payload.\n        + wcli  - for Windows CLI command line executable. *.exe file.\n        + wgui  - for Windows GUI with user interface. -\u003e *.exe file.\n\n   Usage: uber [OPTIONS] \u003cMAIN-JAR\u003e [\u003cJARFILE1.jar\u003e \u003cJARFILE2.jar\u003e ...]\n\n  OPTIONS:\n    -output=\u003cfile\u003e,       -o   Output file, default out.jar\n    -scala,               -s   Bundle Scala runtime library scala-runtime.jar\n    -package=\u003cpack\u003e,      -p   MVN Coordinates of a java package -  \u003cgroup\u003e/\u003cartifact\u003e/\u003cversion\u003e.\n    -file=\u003cfile\u003e,         -f   Jar files to be added to the package.\n    -resource=\u003cfolder\u003e,   -r   Resource directory\n    -jardir=\u003cfolder\u003e,     -jd  Directory containing jar files to be bundled into the uber jar.\n    -exe=\u003cEXE\u003e,           -e   Executable wrapper - default (empty).\n\n#+END_SRC\n\n - Example: subcommand cache \n\n#+BEGIN_SRC text \n  $ jarget cache\n  Show packages in cache directory.\n\n   Usage: cache \u003cACTION\u003e\n\n  OPTIONS:\n    -path,    -  Show cache's directory path.\n    -pack,    -  Show packages in cache directory\n    -jars,    -  Show all jar files in cache directory\n    -clean,   -  Clean cache directory freeing space.\n#+END_SRC\n\n** Maven / Packages Commands\n*** Show package information \n\n - $ jarget mvn-show org.jfree/jfreechart/1.0.17\n\n#+BEGIN_SRC text \n  $ jarget mvn-show\n  Show package's information.\n\n   Usage: mvn-show \u003cPACKAGE\u003e\n\n\n  $ jarget mvn-show org.jfree/jfreechart/1.0.17\n  Package:         JFreeChart\n  Packaging:       jar\n  Coordinates[1]:  group = org.jfree artifact = jfreechart version = 1.0.17\n  Coordinates[2]:  org.jfree/jfreechart/1.0.17\n  Url:             http://www.jfree.org/jfreechart/\n  Description:\n      JFreeChart is a class library, written in Java, for generating charts.\n      Utilising the Java2D APIs, it currently supports bar charts, pie charts,\n      line charts, XY-plots and time series plots.\n\n\n  Dependencies:\n\n    - org.jfree/jcommon/1.0.21\n\n    - xml-apis/xml-apis/1.3.04\n\n\n\n#+END_SRC\n*** Show package's POM file \n\n - $ jarget mvn-pom org.jfree/jfreechart/1.0.17\n\n#+BEGIN_SRC sh \n  $ jarget mvn-pom\n  Show package's pom.xml file.\n\n   Usage: mvn-pom \u003cPACKAGE\u003e\n\n  $ jarget mvn-pom org.jfree/jfreechart/1.0.17\n  \u003cproject xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0                              http://maven.apache.org/maven-\n  v4_0_0.xsd\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://maven.apache.org/POM/4.0.0\"\u003e\n\n      \u003cmodelVersion\u003e4.0.0\u003c/modelVersion\u003e\n\n      \u003cname\u003eJFreeChart\u003c/name\u003e\n\n      \u003cartifactId\u003ejfreechart\u003c/artifactId\u003e\n      \u003cgroupId\u003eorg.jfree\u003c/groupId\u003e\n      \u003cversion\u003e1.0.17\u003c/version\u003e\n      \u003cpackaging\u003ejar\u003c/packaging\u003e\n\n      ... ... ... .... .... ...\n      \n\n#+END_SRC\n*** Open package Documentation Online \n\n - $ jarget mvn-doc org.jfree/jfreechart/1.0.17\n\nIt will open the package's documentation at https://mvnrepository.com.\n\n#+BEGIN_SRC sh  \n  $ jarget mvn-doc\n  Open package documentation in the web browser.\n\n   Usage: mvn-doc \u003cPACKAGE\u003e\n\n  $ jarget mvn-doc org.jfree/jfreechart/1.0.17\n#+END_SRC\n\n*** TODO Install packages in the cache \n\nThis command installs/downloads all packages to jarget cache directory: file:~/.jarget/cache\n\n - jarget mvn -pull -p=pack1 -p=pack2 -p=pack3...\n\nExample: Get teh packages org.jfree/jfreechart/1.0.17 and org.scalaz/scalaz-core_2.11/7.3.0-M15.\n\n#+BEGIN_SRC text \n  $ jarget mvn-pull\n  Download package to cache directory.\n\n  Note: Packages are in the the format \u003cgroup\u003e/\u003cartifact\u003e/\u003cversion\u003e\n   Usage: mvn-pull \u003cPACKAGE1\u003e [\u003cPACKAGE2\u003e ...]\n\n\n     Example:\n      $ jarget mvn-pull org.scalaz/scalaz-core_2.11/7.3.0-M15 org.jfree/jfreechart/1.0.17\n\n\n  $ jarget mvn-pull org.scalaz/scalaz-core_2.11/7.3.0-M15 org.jfree/jfreechart/1.0.17\n  Downloading ---------------------\n  PackData(org.scalaz,scalaz-core_2.11,7.3.0-M15)\n  PackData(org.scala-lang,scala-library,2.11.11)\n  PackData(org.scala-lang.modules,scala-java8-compat_2.11,0.7.0)\n\n  ... ... ...  ... ... ...  ... ... ...  ... \n\n  File /home/archbox/.jarget/cache/org/jfree/jcommon/1.0.21/jcommon-1.0.21.jar downloaded. Ok.\n  File /home/archbox/.jarget/cache/org/jfree/jfreechart/1.0.17/jfreechart-1.0.17.jar downloaded. Ok.\n  Download Successful\n\n#+END_SRC\n\nShow packages in cache: \n\n#+BEGIN_SRC sh \n$ jarget cache -pack\norg.scala-lang/scala-library\nxml-apis/xml-apis\norg.scala-lang.modules/scala-java8-compat_2.11\norg.scalaz/scalaz-core_2.11\norg.jfree/jcommon\norg.jfree/jfreechart\n\n#+END_SRC\n\n*** Copy packages from cache to local directory \n\nThis command copies a package from cache to ./lib directory. The\npackages are downloaded if not available in the cache directory yet.\n\n#+BEGIN_SRC sh \n  $ jarget mvn-copy org.jfree/jfreechart/1.0.17 org.scalaz/scalaz-core_2.11/7.3.0-M15\n\n  Downloading ---------------------\n  Downloading file /home/archbox/.jarget/cache/org/scala-lang/scala-library/2.11.11/scala-library-2.11.11.pom.\n  File /home/archbox/.jarget/cache/org/scalaz/scalaz-core_2.11/7.3.0-M15/scalaz-core_2.11-7.3.0-M15.pom downloaded. Ok.\n  Downloading file /home/archbox/.jarget/cache/org/scalaz/scalaz-core_2.11/7.3.0-M15/scalaz-core_2.11-7.3.0-M15.jar.\n  File /home/archbox/.jarget/cache/org/scala-lang/scala-library/2.11.11/scala-library-2.11.11.pom downloaded. Ok.\n  Downloading file /home/archbox/.jarget/cache/org/scala-lang/scala-library/2.11.11/scala-library-2.11.11.jar.\n  File /home/archbox/.jarget/cache/org/scala-lang/modules/scala-java8-compat_2.11/0.7.0/scala-java8-compat_2.11-0.7.0.pom downloaded. Ok.\n  Downloading file /home/archbox/.jarget/cache/org/scala-lang/modules/scala-java8-compat_2.11/0.7.0/scala-java8-compat_2.11-0.7.0.jar.\n  File /home/archbox/.jarget/cache/org/scala-lang/modules/scala-java8-compat_2.11/0.7.0/scala-java8-compat_2.11-0.7.0.jar downloaded. Ok.\n  File /home/archbox/.jarget/cache/org/scala-lang/scala-library/2.11.11/scala-library-2.11.11.jar downloaded. Ok.\n  File /home/archbox/.jarget/cache/org/scalaz/scalaz-core_2.11/7.3.0-M15/scalaz-core_2.11-7.3.0-M15.jar downloaded. Ok.\n  Download Successful\n  Copying xml-apis-1.3.04.jar to ./lib\n  Copying scalaz-core_2.11-7.3.0-M15.jar to ./lib\n  Copying scala-library-2.11.11.jar to ./lib\n  Copying jfreechart-1.0.17.jar to ./lib\n  Copying jcommon-1.0.21.jar to ./lib\n  Copying scala-java8-compat_2.11-0.7.0.jar to ./lib\n\n\n  $ ls lib/\n  jcommon-1.0.21.jar     scala-java8-compat_2.11-0.7.0.jar  scalaz-core_2.11-7.3.0-M15.jar\n  jfreechart-1.0.17.jar  scala-library-2.11.11.jar          xml-apis-1.3.04.jar\n\n  $ rm -rf lib\n\n#+END_SRC\n\nWhen the command is run the second time, the packages are copied from cache to ./lib.\n\n#+BEGIN_SRC sh \n  $ jarget mvn-copy org.jfree/jfreechart/1.0.17 org.scalaz/scalaz-core_2.11/7.3.0-M15\n  Copying xml-apis-1.3.04.jar to ./lib\n  Copying scalaz-core_2.11-7.3.0-M15.jar to ./lib\n  Copying scala-library-2.11.11.jar to ./lib\n  Copying jfreechart-1.0.17.jar to ./lib\n  Copying jcommon-1.0.21.jar to ./lib\n  Copying scala-java8-compat_2.11-0.7.0.jar to ./lib\n#+END_SRC\n\n*** TODO Clean cache removing all packages \n\n - $ jarget mvn -clear\n\n#+BEGIN_SRC sh \n$ jarget mvn -clear \nCleaning cache\nRemoving file: /home/archbox/.jarget/cache/xml-apis/xml-apis/1.3.04/xml-apis-1.3.04.pom\nRemoving file: /home/archbox/.jarget/cache/xml-apis/xml-apis/1.3.04/xml-apis-1.3.04.jar\n\n                           ... ... ... ... ... \n\nDeleting directory: /home/archbox/.jarget/cache/xml-apis/xml-apis/1.3.04\nDeleting directory: /home/archbox/.jarget/cache/xml-apis/xml-apis\nDeleting directory: /home/archbox/.jarget/cache/xml-apis\nDeleting directory: /home/archbox/.jarget/cache\n#+END_SRC\n\n*** Execute program with classpath for packages from cache \n**** Command \n\n - $ jarget exec -p=pack1 -p=pack2  ...  -- program arg1 arg2 arg2 ...\n\nIt will execute a program with arguments arg1, arg2 and arg3 passing\nthe option =-cp \u003cclasspath of pack1,pack2,..,packn\u003e=, where (-cp)\nargument is the class path of the packages pack1,pack2... from the\ncache directory ~/.jarget/cache, to it. So the program will be\nexecuted with:\n\n - $ program -cp \u003cclasspath of pack1,pack2...\u003e arg1 arg2 arg3 ...\n\nNOTE: The packages are downloaded to cache if not available yet. \n\nCommand help: \n\n#+BEGIN_SRC text \n  $ jarget exec\n  Execute a shell command and pass -cp \u003cCLASSPATH\u003e of packages downloaded to it.\n\n   Usage: exec [OPTIONS] -- \u003cPROGRAM\u003e [\u003cPROGRAM ARGS\u003e ...]\n\n    -package=\u003cPACK\u003e  -p=\u003cPACK\u003e  Package maven's coordinate\n#+END_SRC\n\n**** Example: Running scala with a set of packages in classpath\n\nExample: Run Scala with [[https://mvnrepository.com/artifact/org.typelevel/cats-core_2.12/0.9.0][org.typelevel/cats-core_2.12/0.9.0]]\n\n#+BEGIN_SRC sh \n  $ jarget exec -p=org.typelevel/cats-core_2.12/0.9.0 -- scala\n  Downloading ---------------------\n   ... ... ... ... \n  Package path = PackData(org.typelevel,cats-macros_2.12,0.9.0)\n  Downloading file /home/archbox/.jarget/cache/org/typelevel/cats-macros_2.12/0.9.0/cats-macros_2.12-0.9.0.pom.\n   ... .... ... .... ... \n  File /home/archbox/.jarget/cache/org/scala-lang/scala-library/2.12.1/scala-library-2.12.1.jar downloaded. Ok.\n  Download Successful\n  Welcome to Scala 2.12.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_162).\n  Type in expressions for evaluation. Or try :help.\n\n  scala\u003e \n\n  scala\u003e  import cats._, cats.instances.all._ \n  import cats._\n  import cats.instances.all._\n\n  scala\u003e  val len: String =\u003e Int = _.length\n  len: String =\u003e Int = $$Lambda$1041/28318221@2ed71727\n\n  scala\u003e \n\n  scala\u003e Functor[List].map(List(\"scala\", \"cats\")) (len)\n  res0: List[Int] = List(5, 4)\n\n  scala\u003e \n\n#+END_SRC\n\n**** Example: Running scalac with ase packages in classpath \n\n*Run script with scala and dependencies*\n\nIt runs the script [[file:scripts/chartTest.scala][scripts/chartTest.scala]] with jfreechart\nlibrary in passed to scala classpath. \n\n#+BEGIN_SRC sh \n$ jarget exec -p=org.jfree/jfreechart/1.0.17 -- scala scripts/chartTest.scala \n#+END_SRC\n\nThe command above runs: \n\n#+BEGIN_SRC sh \nscala -cp \u003cclasspath of  org.jfree/jfreechart/1.0.17\u003e scripts/chartTest.scala \n#+END_SRC\n\n*Compile scala program with dependencies* \n\n#+BEGIN_SRC sh \n$ jarget exec -p=org.jfree/jfreechart/1.0.17 -- scalac scripts/chartTest.scala -d chart.jar \n\n$ file chart.jar \nchart.jar: Java archive data (JAR)\n\n# Run the program:\n$ jarget exec -p=org.jfree/jfreechart/1.0.17 -- scala chart.jar \n\n#+END_SRC\n\n*** Download and run executable jar from repository (mvn-run-jar)\n\nThis sub command runs an executable jar (uber jar) from cache\nrepository, the package is downloaded if not available yet.\n\nCommand help:\n\n#+BEGIN_SRC sh  \n$ jarget mvn-run-jar\nRun main method of executable jar package in repository.\n\n Usage: mvn-run-jar \u003cPACKAGE\u003e --  [\u003cARGS\u003e...]\n\n\n Example 1 :  This command download the file proguard-base-6.0.2.jar\n to the cache repository and runs the command java -jar \u003cpath-to-jar\u003e/proguard-base-6.0.2.jar\n Once the file was downloaded, it will be run from cache repository.\n  \u003e\u003e $ jarget mvn-run-jar net.sf.proguard/proguard-base/6.0.2\n\n Example 2 :\n   \u003e\u003e $ jarget mvn-run-jar org.codehaus.groovy/groovy/2.5.0-rc-1 -- file1.groovy\n\n Example 3:  Show Clojure help, to run the repl remove (--help) switch.\n  \u003e\u003e $ jarget mvn-run-jar org.clojure/clojure/1.8.0 -- --help\n\n#+END_SRC\n\nExample: It downloads the clojure 1.8.0 package and runs the command \n\n - $ java -jar \u003cpath-to-package\u003e/clojure-1.8.0.jar\n\n#+BEGIN_SRC sh\n  $  jarget mvn-run-jar org.clojure/clojure/1.8.0\n  Downloading ---------------------\n  PackData(org.clojure,clojure,1.8.0)\n  ----------------------------------\n  Package path = PackData(org.clojure,clojure,1.8.0)\n  Downloading file /home/archbox/.jarget/cache/org/clojure/clojure/1.8.0/clojure-1.8.0.pom.\n  File /home/archbox/.jarget/cache/org/clojure/clojure/1.8.0/clojure-1.8.0.pom downloaded. Ok.\n  Downloading file /home/archbox/.jarget/cache/org/clojure/clojure/1.8.0/clojure-1.8.0.jar.\n  File /home/archbox/.jarget/cache/org/clojure/clojure/1.8.0/clojure-1.8.0.jar downloaded. Ok.\n  Download Successful\n  Clojure 1.8.0\n  user=\u003e\n\n  user=\u003e (+ 1 2 3 4 5 6)\n  21\n  user=\u003e (* 1 2 3 4 5 6)\n  720\n  user=\u003e\n\n#+END_SRC\n\n*** Run a main class of a java package - (mvn-run-cls)\n\n#+BEGIN_SRC text \n$  jarget mvn-run-cls\nRun a main class of a java package (class with main static method).\n\nNote: this command is useful to run packages with multiple entry points.\n Usage: mvn-run-cls \u003cPACKAGE\u003e \u003cCLASS\u003e [\u003cJAVA-PROPERTIES\u003e ...] --  [\u003cARGS\u003e...]\n\n\n Example 1: Run scala compiler and invokes -help by calling class scala.tools.nsc.Main.\n If the scala compiler packages are not in the cache, they will be downloaded. Further\n commands needing those packages will no longer downloaded them.\n  \u003e\u003e\u003e $ jarget mvn-run-cls org.scala-lang.virtualized/scala-compiler/2.11.2  \\\n      scala.tools.nsc.Main -Dscala.usejavacp=true -- -help\n\n Example 2: It will run the Scala REPL.\n  \u003e\u003e\u003e $ jarget mvn-run-cls org.scala-lang.virtualized/scala-compiler/2.11.2  \\\n       scala.tools.nsc.MainGenericRunner -Dscala.usejavacp=true\n\n#+END_SRC\n\n\nExample: This command downloads the package rg.scala-lang.virtualized/scala-compiler/2.11.2 and all its \ndependencies if not available at cache repository, then it runs the class scala.tools.nsc.MainGenericRunner\nwhich invokes the Scala's REPL interactive shell. \n\nThis command is useful to run classes of packages with multiple entry-points (main classes).\n\n#+BEGIN_SRC sh \n  $ jarget mvn-run-cls org.scala-lang.virtualized/scala-compiler/2.11.2  \\\n         scala.tools.nsc.MainGenericRunner -Dscala.usejavacp=true\n\n  $ jarget mvn-run-cls org.scala-lang.virtualized/scala-compiler/2.11.2  \\\n  \u003e        scala.tools.nsc.MainGenericRunner -Dscala.usejavacp=true\n  Downloading ---------------------\n  PackData(org.scala-lang.virtualized,scala-compiler,2.11.2)\n  PackData(org.scala-lang.modules,scala-xml_2.11,1.0.2)\n  PackData(org.scala-lang.virtualized,scala-library,2.11.2)\n  PackData(org.scala-lang.virtualized,scala-reflect,2.11.2)\n  PackData(jline,jline,2.12)\n  PackData(org.scala-lang.modules,scala-parser-combinators_2.11,1.0.1)\n  ----------------------------------\n  Package path = PackData(org.scala-lang.virtualized,scala-compiler,2.11.2)\n  Downloading file /home/archbox/.jarget/cache/org/scala-lang/virtualized/scala-compiler/2.11.2/scala-compiler-2.11.2.pom.\n  Package path = PackData(org.scala-lang.modules,scala-xml_2.11,1.0.2)\n  Package path = PackData(org.scala-lang.virtualized,scala-library,2.11.2)\n\n  ... .... ... ...\n\n  Download Successful\n  Welcome to Scala version 2.11.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_162).\n  Type in expressions to have them evaluated.\n  Type :help for more information.\n\n  scala\u003e\n\n  scala\u003e import javax.swing._\n  import javax.swing._\n\n  scala\u003e val frame = new JFrame(\"Hello world\")\n  frame: javax.swing.JFrame = javax.swing.JFrame[frame0,0,27,0x0,invalid,.... ....\n\n  scala\u003e frame.setSize(400, 500)\n\n  scala\u003e frame.setVisible(true)\n\n#+END_SRC\n\n*** Command \"run\"\n\n#+BEGIN_SRC sh \n  $ jarget run\n  Run a main class from a set of jar file passing the classpath of packages in repository.\n\n   Usage: run [OPTIONS] \u003cMAIN-CLASS\u003e \u003cJAR0\u003e [\u003cJAR1\u003e ....] [\u003cJAVA-PROPERTIES\u003e ...] -- [\u003cARGS\u003e...]\n\n  OPTIONS:\n    -package=\u003cpack\u003e,   -p  MVN Coordinates of a java package -  \u003cgroup\u003e/\u003cartifact\u003e/\u003cversion\u003e.\n\n\n   + \u003cMAIN-CLASS\u003e : Is the a class with a main static method that will be executed.\n   + \u003cJAR0\u003e       : Is a jar package such as ImageViewer.jar\n   + \u003cARGS\u003e       : Are the arguments passed to the main class.\n\n   Example and use case: Run the class Main from the jar\n   demoImageViewer.jar passing the classpath of the package\n   com.jtattoo/JTattoo/1.6.11 from (http://www.jtattoo.net/) and setting\n   the property swing.defaultlaf that changes to Java Swing default look\n   and feel theme.\n\n  $  jarget run Main demoImageViewer.jar -p=com.jtattoo/JTattoo/1.6.11 \\\n     -Dswing.defaultlaf=com.jtattoo.plaf.hifi.HiFiLookAndFeel\n\n#+END_SRC\n\n** Cache commands \n*** Show cache path \n\n - $ jarget cache -path\n\nExample: \n\n#+BEGIN_SRC sh \n$ jarget cache -path\n/home/archbox/.jarget/cache\n\n$ tree $(jarget cache -path)\n/home/archbox/.jarget/cache\n├── com\n│   └── github\n│       └── mpilquist\n│           └── simulacrum_2.12\n│               └── 0.10.0\n│                   ├── simulacrum_2.12-0.10.0.jar\n│                   └── simulacrum_2.12-0.10.0.pom\n└── org\n    ├── scala-lang\n    │   └── scala-library\n    │       └── 2.12.1\n    │           ├── scala-library-2.12.1.jar\n    │           └── scala-library-2.12.1.pom\n    └── typelevel\n        ├── cats-core_2.12\n        │   └── 0.9.0\n        │       ├── cats-core_2.12-0.9.0.jar\n        │       └── cats-core_2.12-0.9.0.pom\n        ├── cats-kernel_2.12\n        │   └── 0.9.0\n        │       ├── cats-kernel_2.12-0.9.0.jar\n        │       └── cats-kernel_2.12-0.9.0.pom\n        ├── cats-macros_2.12\n        │   └── 0.9.0\n        │       ├── cats-macros_2.12-0.9.0.jar\n        │       └── cats-macros_2.12-0.9.0.pom\n        └── machinist_2.12\n            └── 0.6.1\n                ├── machinist_2.12-0.6.1.jar\n                └── machinist_2.12-0.6.1.pom\n#+END_SRC\n\n*** Show all packages in cache \n\n - $ jarget cache -pack\n\n#+BEGIN_SRC sh \n$ jarget cache -pack \norg.scala-lang/scala-library\norg.typelevel/cats-core_2.12\norg.typelevel/cats-macros_2.12\norg.typelevel/cats-kernel_2.12\norg.typelevel/machinist_2.12\ncom.github.mpilquist/simulacrum_2.12\n\n#+END_SRC\n\n*** TODO Show all versions of a given package in cache \n*** Show all jar files in the cache folder\n\n#+BEGIN_SRC sh \n$ jarget cache -jars\n/home/archbox/.jarget/cache/org/typelevel/cats-macros_2.12/0.9.0/cats-macros_2.12-0.9.0.jar\n/home/archbox/.jarget/cache/org/typelevel/machinist_2.12/0.6.1/machinist_2.12-0.6.1.jar\n/home/archbox/.jarget/cache/org/typelevel/cats-core_2.12/0.9.0/cats-core_2.12-0.9.0.jar\n/home/archbox/.jarget/cache/org/typelevel/cats-kernel_2.12/0.9.0/cats-kernel_2.12-0.9.0.jar\n/home/archbox/.jarget/cache/org/scala-lang/scala-library/2.12.1/scala-library-2.12.1.jar\n/home/archbox/.jarget/cache/com/github/mpilquist/simulacrum_2.12/0.10.0/simulacrum_2.12-0.10.0.jar\n\n#+END_SRC\n\n** Scripting with jarget \n   :PROPERTIES:\n   :ID:       b900cee2-b19f-41ae-8ad6-006ab37b9dfc\n   :END:\n*** Overview \n\nJarget can be used to run scala scripts with java packages\ndependencies by downloading them if they are not available in the\njarget package cache file:~/.jarget/cache. \n\n\nShow command help: \n\n#+BEGIN_SRC text \n  $ jarget script\n  Run a scala script with a given set of packages from cache.\n\n   Usage: script [OPTIONS] -- \u003cSCRIPT.scala\u003e [\u003cSCRIPT ARGS\u003e ...]\n\n  OPTIONS:\n    -package=\u003cPACK\u003e,                   -p   Package maven's coordinate\n    -package-str=\u003cPACK1\u003e,\u003cPACK2\u003e...,   -ps  Package's separated by command \u003cpack1\u003e,\u003cpack2\u003e...\u003cpackN\u003e\n#+END_SRC\n\n*** Example 1 - Script with JFreeChart \n     :PROPERTIES:\n     :ID:       cbb743e4-f9a8-4784-be27-b8c0e9599f8b\n     :END:\n\nExample: [[file:scripts/chartScript.sh]]\n\n#+BEGIN_SRC scala :tangle scripts/chartScript.sh\n  #!/bin/sh\n  DEPS=org.jfree/jfreechart/1.0.17\n  exec jarget script -ps=\"$DEPS\" -- \"$0\" \"$@\"\n  !#\n\n  import org.jfree.chart.{ChartPanel, ChartFactory, JFreeChart, ChartUtilities}\n  import org.jfree.data.general.DefaultPieDataset\n\n  object Main{\n\n    def main(args: Array[String]){\n      val dataset = new DefaultPieDataset()\n\n      dataset.setValue(\"A\", 75)\n      dataset.setValue(\"B\", 10)\n      dataset.setValue(\"C\", 10)\n      dataset.setValue(\"D\", 5)\n\n      val chart = ChartFactory.createPieChart(\n         \"Sample Pie Chart\", // Title\n         dataset,            // Dataset \n         true,               // Show legend\n         true,               // Tooltips on\n         false \n       )\n\n      // Save chart to a png file\n      //---------------------------\n      ChartUtilities.saveChartAsPNG(new java.io.File(\"mychart.png\"), chart, 500, 500)\n\n       // Show Chart in a Java Swing Frame\n       //--------------------------------------\n      val frame = new javax.swing.JFrame()\n      frame.add(new ChartPanel(chart))\n      frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE)\n      frame.setSize(693, 513)\n      frame.setTitle(\"Sample Pie Chart\")\n      frame.setVisible(true)\n    }\n\n  }\n\n#+END_SRC\n\nRunning the scala script: It is assumed that jarget is in any directory\nlisted in '$PATH' variable.\n\n#+BEGIN_SRC sh \n  # Make the script executable\n  $ chmod +x chartScript.sh \n\n  # As the dependency jfree chart package has not been downloaded yet,\n  # jarget will download it to the cache directory and run the scala script 'chartScript.scala'\n  # passing the dependency in the classpath parameter. \n  #\n  $ ./chartScript.sh \n  Downloading ---------------------\n  PackData(org.jfree,jfreechart,1.0.17)\n  PackData(org.jfree,jcommon,1.0.21)\n  PackData(xml-apis,xml-apis,1.3.04)\n  ----------------------------------\n  Package path = PackData(org.jfree,jfreechart,1.0.17)\n  Downloading file /home/archbox/.jarget/cache/org/jfree/jfreechart/1.0.17/jfreechart-1.0.17.pom.\n  Package path = PackData(org.jfree,jcommon,1.0.21)\n  Package path = PackData(xml-apis,xml-apis,1.3.04)\n                              ... ... ... ... ... \n  File /home/archbox/.jarget/cache/org/jfree/jcommon/1.0.21/jcommon-1.0.21.jar downloaded. Ok.\n  File /home/archbox/.jarget/cache/org/jfree/jfreechart/1.0.17/jfreechart-1.0.17.jar downloaded. Ok.\n  Download Successful\n\n\n  # When the scala script is run again and the dependencies are in the\n  # cache directory ~/.jarget/cache, the dependencies no longer needs to\n  # be downloaded and the script is executed immediately by passing the\n  # dependencies' classpath to scala runtime.\n  #\n  $ ./chartScript.sh\n#+END_SRC\n*** Example 2 - Script that generates QRCode \n     :PROPERTIES:\n     :ID:       121d73f6-37d4-4a7d-9774-9092d7bf23a9\n     :END:\n\nThis script generates a [[https://en.wikipedia.org/wiki/QR_code][QRCode]] from argument passed from command line\nsaving it to an image file or showing it with a JFrame window.\n\nFile: [[file:scripts/qrcode.sh][file:scripts/qrcode.sh]]\n\n#+BEGIN_SRC scala  :tangle scripts/qrcode.sh   :tangle-mode (identity #o755) :padline no\n  #!/bin/sh\n  DEPS=com.google.zxing/core/2.2,com.google.zxing/javase/2.2\n  exec jarget script -ps=\"$DEPS\" -- \"$0\" \"$@\"\n  !#\n\n  object QRCode { \n\n    import javax.imageio.ImageIO;\n    import java.io._\n    import java.util.HashMap\n    import com.google.zxing.{BarcodeFormat, BinaryBitmap, EncodeHintType, MultiFormatReader}\n    import com.google.zxing.{MultiFormatWriter, NotFoundException, Result, WriterException}\n    import com.google.zxing.client.j2se.MatrixToImageWriter\n    import com.google.zxing.common.{ BitMatrix, HybridBinarizer}\n    import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel\n\n    def writeToFile(\n      data:    String,\n      file:    String  = \"out.png\",\n      width:   Int     = 200,\n      height:  Int     = 200,\n      charset: String  = \"UTF-8\") = {\n      val hintMap = {\n        val h = new HashMap[EncodeHintType, ErrorCorrectionLevel]();\n        h.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);\n        h\n      }\n      val matrix = new MultiFormatWriter().encode(\n        new String(data.getBytes(charset), charset),\n        BarcodeFormat.QR_CODE, width, height, hintMap)\n      MatrixToImageWriter.writeToFile(matrix, \"png\", new File(file));\n    }\n\n\n    def writeToImage(\n      data:    String,\n      width:   Int     = 200,\n      height:  Int     = 200,\n      charset: String  = \"UTF-8\" ): java.awt.image.BufferedImage = {\n      val hintMap = {\n        val h = new HashMap[EncodeHintType, ErrorCorrectionLevel]();\n        h.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);\n        h\n      }\n      val matrix = new MultiFormatWriter().encode(\n         new String(data.getBytes(charset), charset),\n        BarcodeFormat.QR_CODE, width, height, hintMap)\n      MatrixToImageWriter.toBufferedImage(matrix)\n    }\n\n\n    /** Show QR code in a JFrame */\n    def show(\n      data:    String,\n      width:   Int         = 200,\n      height:  Int         = 200,\n      charset: String      = \"UTF-8\",\n      title:   String      = \"QRCode\",\n      exitOnClose: Boolean = false\n    ) = {\n      import javax.swing.{ImageIcon, JFrame, JLabel, JPanel}\n      val bimg  = writeToImage(data, width, height, charset)\n      val frame = new javax.swing.JFrame(\"Frame 1\")\n      frame.setSize(400, 400)\n      val pic = new javax.swing.JLabel(new ImageIcon(bimg))\n      frame.add(pic)\n      if (exitOnClose)\n        frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE)\n      frame.setVisible(true)\n    }\n\n  } // ------- End of Object QRCode ------------ // \n\n\n  val testUrl = \"https://msdn.microsoft.com/en-us/library/ff798384.aspx\"\n\n  args.toList match { \n    case List(\"-show\", data)\n        =\u003e QRCode.show(data, exitOnClose = true)\n    case List(\"-file\", data, file)\n        =\u003e QRCode.writeToFile(data, file)\n\n    case List(\"-test1\")\n        =\u003e {\n          println(\"Generating QRcode for testing URL: \" + testUrl)\n          QRCode.show(testUrl, exitOnClose = true)\n        }\n\n    case List(\"-test2\")\n        =\u003e {\n          println(\"Generating QRcode image file images/qrcodeTest.png for testing URL: \" + testUrl)\n          QRCode.writeToFile(testUrl, \"images/qrcodeTest.png\")\n        }\n\n    case _\n        =\u003e {\n          println(\"Valid commands\")\n          println(\"$ jqrcode -file \u003cfile\u003e \u003cdata\u003e\")\n          println(\"$ jqrcode -show \u003cdata\u003e\")\n        }   \n  }\n\n#+END_SRC\n\n*Running*\n\n#+BEGIN_SRC sh \n$ scripts/qrcode.sh \nValid commands\n$ jqrcode -file \u003cfile\u003e \u003cdata\u003e\n$ jqrcode -show \u003cdata\u003e\n#+END_SRC\n\n*Generating image with QRcode.*\n\nIt will generate a QRCode shown in the image below containing \"Hello\nworld QRCode\". The script dependencies are downloaded to the cache\ndirectory if they are not available yet. \n\n#+BEGIN_SRC sh \n$ scripts/qrcode.sh -file \"Hello world QRCode\" images/qrcode.png\nDownloading ---------------------\nPackData(com.google.zxing,core,2.2)\n----------------------------------\nPackage path = PackData(com.google.zxing,core,2.2)\nDownloading file /home/archbox/.jarget/cache/com/google/zxing/core/2.2/core-2.2.pom.\nFile /home/archbox/.jarget/cache/com/google/zxing/core/2.2/core-2.2.pom downloaded. Ok.\nDownloading file /home/archbox/.jarget/cache/com/google/zxing/core/2.2/core-2.2.jar.\nFile /home/archbox/.jarget/cache/com/google/zxing/core/2.2/core-2.2.jar downloaded. Ok.\nDownload Successful\nDownloading ---------------------\nPackData(com.google.zxing,javase,2.2)\n----------------------------------\nPackage path = PackData(com.google.zxing,javase,2.2)\nDownloading file /home/archbox/.jarget/cache/com/google/zxing/javase/2.2/javase-2.2.pom.\nFile /home/archbox/.jarget/cache/com/google/zxing/javase/2.2/javase-2.2.pom downloaded. Ok.\nDownloading file /home/archbox/.jarget/cache/com/google/zxing/javase/2.2/javase-2.2.jar.\nFile /home/archbox/.jarget/cache/com/google/zxing/javase/2.2/javase-2.2.jar downloaded. Ok.\nDownload Successful\n\n#+END_SRC\n\nFile: images/qrcode.png\n\n[[file:images/qrcode.png]]  \n\n*Show QRcode in a window* \n\n#+BEGIN_SRC sh\n$ scripts/qrcode.sh -show \"Hello world QRCode\" \n\n$ scripts/qrcode.sh -test1 \nGenerating QRcode for testing URL: https://msdn.microsoft.com/en-us/library/ff798384.aspx\n\n$  scripts/qrcode.sh -test2 \nGenerating QRcode image file images/qrcodeTest.png for testing URL: https://msdn.microsoft.com/en-us/library/ff798384.aspx\n#+END_SRC\n\n** Command to manipulate Jar packages\n*** Overview \n\nThe commands to manipulate jars are listed below: \n\n#+BEGIN_SRC text \n  $ jarget | grep jar\n    uber               Build uber jar file for deployment by bundling dependencies and resource files.\n    run                Run a main class from a set of jar file passing the classpath of packages in repository.\n    mvn-run-jar        Run main method of executable jar package in repository.\n    mvn-copy           Copy jar packages from cache directory to ./lib downloading them if not available.\n    jar-to-exe         Embed Uber jar into Unix executable or Windows Executable (experimental).\n    jar-man            Show manifest of a jar file.\n    jar-main-class     Show main class of a jar file.\n    jar-ls             Show contents of a jar file.\n    jar-rs             Show resources of a jar file ignoring *.class files.\n    jar-cat            Show content of a file in a jar package.\n    jar-ex             Extract \u003cfile\u003e from jar file \u003cFILE.jar\u003e to current directory.\n#+END_SRC\n\nThose commands are simple and self-explanatory and easier to remember.\n\n#+BEGIN_SRC sh\n  $ jarget jar-ls -h\n  Show contents of a jar file.\n\n   Usage: jar-ls \u003cFILE.jar\u003e\n\n  $ jarget jar-ex -h\n  Extract \u003cfile\u003e from jar file \u003cFILE.jar\u003e to current directory.\n\n   Usage: jar-ex \u003cFILE.jar\u003e \u003cfile\u003e\n\n  $ jarget jar-to-exe\n  Embed Uber jar into Unix executable or Windows Executable (experimental).\n\n   Usage: jar-to-exe [OPTIONS] \u003cFILE.jar\u003e\n\n  OPTIONS:\n    -exe=\u003cEXE\u003e,       -e  Executable type.\n    -output=\u003cFILE\u003e,   -o  Output file, default \u003cFILE\u003e without extension + .sh or .exe.\n\n\n   Note - \u003cEXE\u003e can be:\n     + uexe - for Unix executable - Shell script with embedded uber-jar payload.\n     + wcli - for Windows CLI command line executable. *.exe file.\n     + wgui - for Windows GUI with user interface. -\u003e *.exe file.\n\n\n#+END_SRC\n\n*** Show manifest file \n\n - $ jarget jar-man JARFILE.jar \n\n#+BEGIN_SRC sh \n  $  jarget jar-man lib/jfreechart-1.0.17.jar\n  Manifest-Version: 1.0\n  Ant-Version: Apache Ant 1.8.2\n  Implementation-Title: JFreeChart\n  Implementation-Version: 1.0.17\n  Specification-Vendor: jfree.org\n  Specification-Title: JFreeChart\n  Created-By: 1.7.0_21-b12 (Oracle Corporation)\n  Specification-Version: 1.0.17\n  Implementation-Vendor: jfree.org\n\n#+END_SRC\n\n*** Show contents of single file \n\n - $ jarget jar-cat [jar] [file]\n\n#+BEGIN_SRC sh \n  $ jarget jar-cat lib/jfreechart-1.0.17.jar META-INF/MANIFEST.MF\n\n  Manifest-Version: 1.0\n  Ant-Version: Apache Ant 1.8.2\n  Created-By: 1.7.0_21-b12 (Oracle Corporation)\n  Specification-Title: JFreeChart\n  Specification-Version: 1.0.17\n  Specification-Vendor: jfree.org\n  Implementation-Title: JFreeChart\n  Implementation-Version: 1.0.17\n  Implementation-Vendor: jfree.org\n\n  ... .... ... .... ... .... ... .... ... ....\n\n  $ jarget jar-cat lib/jfreechart-1.0.17.jar org/jfree/chart/plot/LocalizationBundle_pt_PT.properties\n  # org.jfree.chart.ChartPanel ResourceBundle properties file - portuguese version\n  # \n  # Changes (from 09-Set-2003)\n  # --------------------------\n  # 09-Set-2003 : Initial version (Eduardo Ramalho);\n  #\n\n  Category_Plot=Barras\n  Combined_Domain_XYPlot=Curvas combinadas pela abcissa\n  Combined_Range_XYPlot=Curvas combinadas pela ordenada\n  Compass_Plot=Compasso\n  Contour_Plot=Contours\n  Fast_Scatter_Plot=Dispers\\u00E3o\n  Meter_Plot=N\\u00EDvel\n  Period_Marker_Plot=Period Marker Plot\n  Pie_Plot=Sectores\n  Thermometer_Plot=Term\\u00a2metro\n  XY_Plot=Curvas\n  Pie_3D_Plot=Sectores 3D\n  Too_many_elements=Too many elements\n\n  # points of the compass\n  N=N\n  E=E\n  S=S\n  W=W\n\n\n#+END_SRC\n\n*** List all files \n \n - $ jarget jar-ls [jar]\n\n#+BEGIN_SRC sh \n$ jarget jar-ls jarget.jar \n\nMETA-INF/MANIFEST.MF\nPackData.class\nPackData$.class\nPomData.class\nPomData$.class\nUtils.class\nUtils$.class\nJarUtils.class\nJarUtils$.class\nPackget.class\nPackget$.class\nMain.class\nMain$.class\nPackget$$anonfun$downloadPackage$4.class\nPackget$$anonfun$downloadPackage$5.class\n\n#+END_SRC\n\n*** List resource/asset files \n\n - $ jarget jar-rs [jar]\n\nShow all resource files disregarding *.class files. \n\n#+BEGIN_SRC sh \n$ jarget jar-rs lib/jfreechart-1.0.17.jar \nMETA-INF/MANIFEST.MF\norg/jfree/chart/LocalizationBundle.properties\norg/jfree/chart/LocalizationBundle_cs.properties\norg/jfree/chart/LocalizationBundle_de.properties\norg/jfree/chart/LocalizationBundle_es.properties\norg/jfree/chart/LocalizationBundle_fr.properties\norg/jfree/chart/LocalizationBundle_it.properties\n\n ... ... ... ...  ... ... ... ...  ... ... ... ... \n\norg/jfree/chart/plot/LocalizationBundle_ru.properties\norg/jfree/chart/plot/LocalizationBundle_zh_CN.properties\n#+END_SRC\n\n*** Extract file to current directory\n\n - jarget jar -extract [jar] [file]\n\nExtract file from jar to current directory.\n\n#+BEGIN_SRC sh \n  $ jarget jar-ex -h\n  Extract \u003cfile\u003e from jar file \u003cFILE.jar\u003e to current directory.\n\n   Usage: jar-ex \u003cFILE.jar\u003e \u003cfile\u003e\n\n  $ jarget jar-ex lib/jfreechart-1.0.17.jar META-INF/MANIFEST.MF\n\n  $ cat MANIFEST.MF \n  Manifest-Version: 1.0\n  Ant-Version: Apache Ant 1.8.2\n  Created-By: 1.7.0_21-b12 (Oracle Corporation)\n  Specification-Title: JFreeChart\n  Specification-Version: 1.0.17\n  Specification-Vendor: jfree.org\n  Implementation-Title: JFreeChart\n  Implementation-Version: 1.0.17\n  Implementation-Vendor: jfree.org\n#+END_SRC\n*** Convert a jar file to executable jar file \n\nShow Help: \n\n#+BEGIN_SRC sh \n  $ jarget jar-to-exe\n  Embed Uber jar into Unix executable or Windows Executable (experimental).\n\n   Usage: jar-to-exe [OPTIONS] \u003cFILE.jar\u003e\n\n  OPTIONS:\n    -exe=\u003cEXE\u003e,       -e  Executable type.\n    -output=\u003cFILE\u003e,   -o  Output file, default \u003cFILE\u003e without extension + .sh or .exe.\n\n\n   Note - \u003cEXE\u003e can be:\n     + uexe - for Unix executable - Shell script with embedded uber-jar payload.\n     + wcli - for Windows CLI command line executable. *.exe file.\n     + wgui - for Windows GUI with user interface. -\u003e *.exe file.\n\n#+END_SRC\n\nExamples:\n\n - $ jarget jar-to-exe application.jar \n\nGenerates an Unix shell script with a jar payload, named ./application\nfrom the file application.jar that can be run with =$ java -jar application.jar=\n\n\nExample: Generate a *nix executable (runnable or self-executable jar\nfile) named proguard from proguard.jar.\n\n#+BEGIN_SRC sh \n  $ java -jar proguard.jar \n  ProGuard, version 5.3.3\n  Usage: java proguard.ProGuard [options ...]\n\n  # Builds Unix executable with embedded shell script \n  $ jarget jar-to-exe proguard.jar\n  Built file ./proguard\n\n  # Build Windows executable with proguard embedded - (Note: Experimental)\n  $  jarget jar-to-exe -exe=wcli proguard.jar\n  Built file ./proguard.exe\n\n  $ proguard \n  bash: proguard: command not found\n\n  #   If the app is moved to some directory in $PATH variable, \n  # it can be ran without forward slash (/) as any ordinary unix app \n  # such as ls, echo, ps, ... \n  $ mv proguard ~/bin\n\n  $ proguard \n  ProGuard, version 5.3.3\n  Usage: java proguard.ProGuard [options ...]\n\n  $ which proguard \n  /home/archbox/bin/proguard\n\n  # Check the file type \n  ##\n  $ file /home/archbox/bin/proguard\n  /home/archbox/bin/proguard: a /usr/bin/env sh script executable (binary data)\n\n  # Check the executable header \n  ##\n  $ head -n 7 proguard\n  #!/usr/bin/env sh\n\n  # Check if JAVA_HOME is Set\n  if [ -n \"${JAVA_HOME}\" ]\n  then\n      # Check if JAVA is Installed in this JAVA_HOME\n      if [ -f  \"$JAVA_HOME/bin/java\" ] ;\n\n#+END_SRC\n** Build fatjar, uber Jar or executable uber jar \n\nHelp: \n\n#+BEGIN_SRC text \n  $ jarget uber\n  Build uber jar file for deployment by bundling dependencies and resource files.\n\n\n      Note - \u003cEXE\u003e can be:\n        + empty - (default) for jar file without any executable wrapper.\n        + uexe  - for Unix executable - Shell script with embedded uber-jar payload.\n        + wcli  - for Windows CLI command line executable. *.exe file.\n        + wgui  - for Windows GUI with user interface. -\u003e *.exe file.\n\n   Usage: uber [OPTIONS] \u003cMAIN-JAR\u003e [\u003cJARFILE1.jar\u003e \u003cJARFILE2.jar\u003e ...]\n\n  OPTIONS:\n    -output=\u003cfile\u003e,       -o   Output file, default out.jar\n    -scala,               -s   Bundle Scala runtime library scala-runtime.jar\n    -package=\u003cpack\u003e,      -p   MVN Coordinates of a java package -  \u003cgroup\u003e/\u003cartifact\u003e/\u003cversion\u003e.\n    -file=\u003cfile\u003e,         -f   Jar files to be added to the package.\n    -resource=\u003cfolder\u003e,   -r   Resource directory\n    -jardir=\u003cfolder\u003e,     -jd  Directory containing jar files to be bundled into the uber jar.\n    -exe=\u003cEXE\u003e,           -e   Executable wrapper - default (empty).\n#+END_SRC\n\nThe parameter \u003cEXE\u003e from -exe=\u003cEXE\u003e can be: \n \n + empty -\u003e (default) Simple uber jar intended to be executed by double clicking\n   at it or by\n\n + uexe  -\u003e Unix executable: Shell script with uber jar payload\n\n + wcli  -\u003e Embed generated uber-jar into a Windows command line\n   executable. This feature is still experimental and Anti Virus\n   complains about the lack of signature.\n\n + wgui -\u003e Embed generated uber-jar into a Windows GUI\n   executable. This feature is still experimental. \n\nExample: Make a scala uber-jar from the program [[file:scripts/chartTest.scala][file:scripts/chartTest.scala]] \n\n#+BEGIN_SRC sh \n\n  # Step 1 -  Compile app to jar file.\n  #\n  # If the dependency is not available in the cache, it will be downloaded\n  # from the package default repository.\n  #\n  $ jarget exec -p=org.jfree/jfreechart/1.0.17 -- scalac scripts/chartTest.scala -d chartTest.jar\n\n  Downloading ---------------------\n  PackData(org.jfree,jfreechart,1.0.17)\n  PackData(org.jfree,jcommon,1.0.21)\n  PackData(xml-apis,xml-apis,1.3.04)\n  ----------------------------------\n    ... ... ... ... ... ... ... ... ... \n  Downloading file /home/archbox/.jarget/cache/xml-apis/xml-apis/1.3.04/xml-apis-1.3.04.jar.\n  File /home/archbox/.jarget/cache/xml-apis/xml-apis/1.3.04/xml-apis-1.3.04.jar downloaded. Ok.\n  File /home/archbox/.jarget/cache/org/jfree/jcommon/1.0.21/jcommon-1.0.21.jar downloaded. Ok.\n  File /home/archbox/.jarget/cache/org/jfree/jfreechart/1.0.17/jfreechart-1.0.17.jar downloaded. Ok.\n  Download Successful\n\n  # The next time the command is run, the packages will no longer be downloaded as\n  # they are already in the cache directory. ~/.jarget/cache/\n  #\n  $ jarget exec -p=org.jfree/jfreechart/1.0.17 -- scalac scripts/chartTest.scala -d chartTest.jar \n\n  # Step 2 - Run the jar file. \n  #\n  $ jarget exec -p=org.jfree/jfreechart/1.0.17 -- scala chartTest.jar \n\n  # Step 3 - Make uber-jar by packing dependencies into a single jar.\n\n  #-- Create an ordinary uber jar that can be run with java -jar or by clicking on it, \n  # if the application is a GUI.\n  $ jarget uber chartTest.jar -scala -p=org.jfree/jfreechart/1.0.17\n  Built file: chartTest-out.jar\n  \n  # -- Embedding in a shell script for running on UNIX, Linux, MacOSX, BSD ... \n  $ jarget uber chartTest.jar -o=chartTest.sh -scala -exe=uexe -p=org.jfree/jfreechart/1.0.17\n\n  #--- Embedding Uber jar into an Windows Executable\n  $ jarget uber chartTest.jar -o=chartTest.exe -scala -exe=wgui -p=org.jfree/jfreechart/1.0.17\n\n  $ file chartTest.exe\n  chartTest.exe: PE32 executable (GUI) Intel 80386, for MS Windows\n\n  # Run the uber-jar - Way 1 \n  $ ./chartTest.sh \n\n  # Run the uber-jar - Way 2\n  $ java -jar ./chartTest.sh\n\n  # Run the uber-jar - Way 3\n  $ sh ./chartTest.sh\n\n#+END_SRC\n\nExample: Make a scala self-executable jar for the app jarget.\n\n#+BEGIN_SRC sh \n$ scala jarget.jar uber -scala -sh -o jarget -m jarget.jar -j /home/archbox/opt/scala-2.12.3/lib/scala-xml_2.12-1.0.6.jar \nBuilt file:  jarget ok\nRun it with: $ java -jar jarget\n\n# Run it \n$ ./jarget \n#+END_SRC\n\n** Build Automation - Project file\n\nWARNING: Experimental feature. \n\nJarget has the ability build small or simple projects with a simple\nconfiguration file with a declarative json-like syntax provided by\nthe parser library https://github.com/lightbend/config.\n\nExample:\n\n - File: build.conf \n\n#+BEGIN_SRC conf \n  scalaVersion = 2.12\n  # Name of the library, program or application without extension. \n  app = jptk \n  # Directories containing source that will be compiled \n  src = ./proejct/src\n  # Output file - destination of object files\n  output = ./out\n  # Depdencies in the format (com.typesafe/config/1.3.3) \n  packages = [\n    org.typelevel/cats-core_2.12/0.9.0,\n    org.beanshell/bsh/2.0b5,\n    org.codehaus.groovy/groovy-all/2.4.15\n  ]\n\n  # List of resource directories that will be appended to release build\n  resources = [\n    ./assets \n  ]\n#+END_SRC\n\nExplanation: \n\n + app = \u003cname of application\u003e\n\n + src = \u003cdirectory which contains source code\u003e *.scala files.\n   + Default value: ./src \n\n + output = \u003coutput directory\u003e\n   + Default value: ./bin\n\n + packages \n\n *Project Commands:*\n\n - Show project file: \n\n#+BEGIN_SRC sh \n  $ cat build.conf\n\n  # Jarget configuration file\n  scalaVersion = 2.12\n\n  # Program name without any extension\n  app = jmhttp\n  # Main class\n  mainclass = JargetMain\n\n  # Directories that will be compiled  (default ./src)\n  src = src\n\n  # Output Directory (default ./bin)\n  output = ./bin\n\n  # Depdencies\n  packages = [\n     javax.jmdns/jmdns/3.4.1\n  ]\n\n  # resources = [\n  #     ./assets\n  # ]\n#+END_SRC\n\n\n - Show build details.\n\n#+BEGIN_SRC sh \n  $ jarget pj-show -h\n  Show project configuration\n\n  USAGE: $ jarget pj-show\n\n  OPTIONS:\n    -file=\u003cFILE\u003e,   -f  Project file. (default build.conf)\n\n\n  $ jarget pj-show\n\n  Source directory = src\n  Development build output file = ./bin/jmhttp-dev.jar\n  Output directory              = ./bin\n  Scala Version    = 2.12\n\n  Source files:\n   ------------------------------------\n   - src/server.scala\n   - src/utils.Utils.scala\n   - src/utils.ImageUtils.scala\n   - src/main.scala\n   - src/optParse.scala\n\n  Dependencies:\n   ------------------------------------\n   - javax.jmdns/jmdns/3.4.1\n\n\n#+END_SRC\n\n - Carry out development build (build without any bundled\n   dependency and cannot be run as standalone app.)\n\n#+BEGIN_SRC sh\n  $ jarget pj-make -h\n  Create development build.\n\n\n   Note: the development build is the project compiled without\n         any dependency bundled with object file.\n\n  USAGE: $ jarget pj-make\n\n  OPTIONS:\n    -file=\u003cFILE\u003e,   -f  Project file. (default build.conf)\n    -verbose,       -   Turn verbosity on.\n\n  $ jarget pj-make\n  Downloading ---------------------\n  PackData(javax.jmdns,jmdns,3.4.1)\n  ----------------------------------\n  Package path = PackData(javax.jmdns,jmdns,3.4.1)\n  Downloading file /home/archbox/.jarget/cache/javax/jmdns/jmdns/3.4.1/jmdns-3.4.1.pom.\n  File /home/archbox/.jarget/cache/javax/jmdns/jmdns/3.4.1/jmdns-3.4.1.pom downloaded. Ok.\n  Downloading file /home/archbox/.jarget/cache/javax/jmdns/jmdns/3.4.1/jmdns-3.4.1.jar.\n  File /home/archbox/.jarget/cache/javax/jmdns/jmdns/3.4.1/jmdns-3.4.1.jar downloaded. Ok.\n  Download Successful\n\n  # Generates: \n  $ ls bin/jmhttp-dev.jar\n  bin/jmhttp-dev.jar\n\n\n#+END_SRC\n\n - Run the develpment build. \n\n#+BEGIN_SRC sh \n   $ jarget pj-run -h\n   Run development build, compiling it if out of sync with sources.\n\n   -\n   USAGE: $ jarget pj-run pj-run -- [\u003cPROGRAM ARG\u003e ...]\n\n   OPTIONS:\n     -file=\u003cFILE\u003e,   -f  Project file. (default build.conf)\n\n  $ jarget pj-run\n  A micro Java/Scala http server to share files on the local network\n\n  Usage: jmhttp [OPTIONS] ... [[DIRECTORY] | [URL:DIRECTORY] [URL:DIRECTORY] ...]\n\n  #=============================================\n  $ jarget pj-run -- --version\n  jmhttp - v1.3\n\n\n#+END_SRC\n\n - Perform release build - the object code is bundled with all\n   dependencies and the scala runtime library. \n\n#+BEGIN_SRC sh \n  $ jarget pj-release -h\n  Compile project building uber jar in executable wrapper.\n\n  -\n  USAGE: $ jarget pj-release\n\n  OPTIONS:\n    -file=\u003cFILE\u003e,     -f  Project file. (default build.conf)\n    -verbose,         -   Turn verbosity on.\n    -exe=\u003cEXE\u003e,       -e  Executable wrapper - [empty, uexe, wcli, wgui] - default (empty)\n    -show,            -   Show project configuration before building.\n    -output=\u003cFILE\u003e,   -o  Output file, default \u003cFILE\u003e without extension + .sh or .exe.\n\n   # Build uber jar ready to use \n   $ jarget pj-release\n   Built file: ./bin/jmhttp-release.jar\n\n   $ java -jar bin/jmhttp-release.jar --version\n   jmhttp - v1.3\n\n   # Build uber jar embed in Unix shell script (non native executable)\n   $ jarget pj-release -exe=uexe\n   Built file: ./bin/jmhttp-release.sh\n\n   $ bin/jmhttp-release.sh --version\n   jmhttp - v1.3\n\n   # Build uber jar embedded in Windows console native executable (.exe)\n   $ jarget pj-release -exe=wcli\n   Built file: ./bin/jmhttp-release.exe\n\n   # Build uber jar embedded in Windows GUI native executable (*.exe)\n   $ jarget pj-release -exe=wgui\n   Built file: ./bin/jmhttp-release.exe\n\n   $ file bin/jmhttp-release.exe\n   bin/jmhttp-release.exe: PE32 executable (GUI) Intel 80386, for MS Windows\n\n#+END_SRC\n\n** System Information \n*** Show Enviroment Variables \n\nCommand help:\n\n#+BEGIN_SRC text \n  $ jarget utils\n  General utilities helpers for platform information and debugging.\n\n\n    Actions:\n     + env        - Show environment variables\n     + env \u003cvar\u003e  - Show a given environment variable.\n     + prop       - Show java properties.\n     + prop \u003cvar\u003e - Show a given a java property.\n     + path       - Show path variable\n     + info       - Show platform information.\n\n    Example: $ jarget utils info\n\n\n   Usage: utils \u003cACTION\u003e\n\n#+END_SRC\n\n - =$ jarget utils -env=\n\nOn Linux: \n\n#+BEGIN_SRC text \n$ jarget utils env\n   Environment Variable         Value\n   ------------------------     --------------------------------------------------\n   PATH                         /usr/local/sbin:/usr/local/bin:/usr/bin:/usr/li...\n   XAUTHORITY                   /home/archbox/.Xauthority\n   LC_MEASUREMENT               pt_BR.UTF-8\n   LC_TELEPHONE                 pt_BR.UTF-8\n   GDMSESSION                   xfce\n   XDG_DATA_DIRS                /usr/local/share:/usr/share\n   LC_TIME                      pt_BR.UTF-8\n   ... ... ... ... \n   NLSPATH                      /usr/dt/lib/nls/msg/%L/%N.cat\n   QT_QPA_PLATFORMTHEME         qt5ct\n   XDG_RUNTIME_DIR              /run/user/1001\n   XDG_VTNR                     7\n   HOME                         /home/archbox\n   ------------------------     --------------------------------------------------\n\n\n#+END_SRC\n\nOn Windows: \n\n#+BEGIN_SRC text \n  C:\\Users\\archbox\\Desktop\u003ejava -jar jarget utils env\n     Environment Variable          Value\n     -------------------------     --------------------------------------------------\n     USERDOMAIN_ROAMINGPROFILE     DESKTOP-2TJVI2H\n     LOCALAPPDATA                  C:\\Users\\archbox\\AppData\\Local\n     ChocolateyLastPathUpdate      Thu Feb 15 06:11:43 2018\n     PROCESSOR_LEVEL               6\n     USERDOMAIN                    DESKTOP-2TJVI2H\n     LOGONSERVER                   \\\\DESKTOP-2TJVI2H\n     JAVA_HOME                     C:\\Program Files\\Java\\jdk1.8.0_162\n     PROMPT                        $P$G\n     SESSIONNAME                   Console\n     ALLUSERSPROFILE               C:\\ProgramData\n     PROCESSOR_ARCHITECTURE        AMD64\n     PSModulePath                  C:\\Program Files\\WindowsPowerShell\\Modules;C:\\W...\n     SystemDrive                   C:\n     =ExitCode                     00000000\n     OneDrive                      C:\\Users\\archbox\\OneDrive\n     =C:                           C:\\Users\\archbox\\Desktop\n     APPDATA                       C:\\Users\\archbox\\AppData\\Roaming\n     USERNAME                      archbox\n             ... . .. ... . .. .. . .. . .. \n     Path                          C:\\Windows\\system32;C:\\Windows;C:\\Windows\\Syste...\n     PATHEXT                       .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WS...\n     OS                            Windows_NT\n     COMPUTERNAME                  DESKTOP-2TJVI2H\n     PROCESSOR_REVISION            4e03\n     CLASSPATH                     .;\n     CommonProgramW6432            C:\\Program Files\\Common Files\n     ComSpec                       C:\\Windows\\system32\\cmd.exe\n     ProgramData                   C:\\ProgramData\n             ... . .. ... . .. .. . .. . .. \n     windir                        C:\\Windows\n     =::                           ::\\\n     -------------------------     --------------------------------------------------\n\n#+END_SRC\n\n*** Show PATH Environment Variable \n\n - =$ jarget utils -path=\n\nOn Linux:\n\n#+BEGIN_SRC text \n  $ jarget utils -path\n  /usr/local/sbin\n  /usr/local/bin\n  /usr/bin\n  /usr/lib/jvm/default/bin\n  /usr/bin/site_perl\n  /usr/bin/vendor_perl\n  /usr/bin/core_perl\n  /home/archbox/opt/java/bin\n  /home/archbox/opt/scala-2.11.8/bin/\n  /home/archbox/bin\n  ... ... ... ... \n\n#+END_SRC\n\nOn Windows: \n\n#+BEGIN_SRC text \n  C:\\Users\\archbox\\Desktop\u003e java -jar jarget utils path\n\n  C:\\Windows\\system32\n  C:\\Windows\n  C:\\Windows\\System32\\Wbem\n  C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\\n  C:\\ProgramData\\chocolatey\\bin\n  C:\\Program Files\\Java\\jdk1.8.0_162\\bin\n  C:\\Users\\archbox\\AppData\\Local\\Microsoft\\WindowsApps\n\n#+END_SRC\n\n*** Show Java Properties \n\n - =$ jarget utils -prop=\n\nShow all Java properties from System.getProperties().\n\nOn Linux:\n\n#+BEGIN_SRC text \n$ jarget utils prop\n   Java Property                     Value\n   -----------------------------     --------------------------------------------------\n   java.runtime.name                 OpenJDK Runtime Environment\n   sun.boot.library.path             /usr/lib/jvm/java-8-openjdk/jre/lib/amd64\n   java.vm.version                   25.141-b15\n   java.vm.vendor                    Oracle Corporation\n   java.vendor.url                   http://java.oracle.com/\n   path.separator                    :\n   java.vm.name                      OpenJDK 64-Bit Server VM\n   file.encoding.pkg                 sun.io\n   user.country                      US\n   sun.java.launcher                 SUN_STANDARD\n   sun.os.patch.level                unknown\n   java.vm.specification.name        Java Virtual Machine Specification\n   user.dir                          /home/archbox/Documents/projects/jarget.scala\n   java.runtime.version              1.8.0_141-b15\n   java.awt.graphicsenv              sun.awt.X11GraphicsEnvironment\n   java.endorsed.dirs                /usr/lib/jvm/java-8-openjdk/jre/lib/endorsed\n   os.arch                           amd64\n   java.io.tmpdir                    /tmp\n   line.separator                    \n\n   java.vm.specification.vendor      Oracle Corporation\n   os.name                           Linux\n   sun.jnu.encoding                  UTF-8\n   java.library.path                 /usr/java/packages/lib/amd64:/usr/lib64:/lib64:...\n   java.specification.name           Java Platform API Specification\n   java.class.version                52.0\n   sun.management.compiler           HotSpot 64-Bit Tiered Compilers\n   os.version                        4.9.31-1-MANJARO\n   user.home                         /home/archbox\n   user.timezone                     \n   java.awt.printerjob               sun.print.PSPrinterJob\n   file.encoding                     UTF-8\n   java.specification.version        1.8\n   java.class.path                   /home/archbox/bin/jarget\n   user.name                         archbox\n   java.vm.specification.version     1.8\n   sun.java.command                  /home/archbox/bin/jarget -system prop\n   java.home                         /usr/lib/jvm/java-8-openjdk/jre\n   sun.arch.data.model               64\n   user.language                     en\n   java.specification.vendor         Oracle Corporation\n   awt.toolkit                       sun.awt.X11.XToolkit\n   java.vm.info                      mixed mode\n   java.version                      1.8.0_141\n   java.ext.dirs                     /usr/lib/jvm/java-8-openjdk/jre/lib/ext:/usr/ja...\n   sun.boot.class.path               /usr/lib/jvm/java-8-openjdk/jre/lib/resources.j...\n   java.vendor                       Oracle Corporation\n   file.separator                    /\n   java.vendor.url.bug               http://bugreport.sun.com/bugreport/\n   sun.io.unicode.encoding           UnicodeLittle\n   sun.cpu.endian                    little\n   sun.cpu.isalist                   \n   -----------------------------     --------------------------------------------------\n\n#+END_SRC\n\nOn Windows: \n\n#+BEGIN_SRC text \n  C:\\Users\\archbox\\Desktop\u003ejava -jar jarget utils prop\n     Java Property                     Value\n     -----------------------------     --------------------------------------------------\n     java.runtime.name                 Java(TM) SE Runtime Environment\n     sun.boot.library.path             C:\\Program Files\\Java\\jdk1.8.0_162\\jre\\bin\n     java.vm.version                   25.162-b12\n     java.vm.vendor                    Oracle Corporation\n     java.vendor.url                   http://java.oracle.com/\n     path.separator                    ;\n     java.vm.name                      Java HotSpot(TM) 64-Bit Server VM\n     file.encoding.pkg                 sun.io\n     user.country                      US\n     user.script\n     sun.java.launcher                 SUN_STANDARD\n     sun.os.patch.level\n     java.vm.specification.name        Java Virtual Machine Specification\n     user.dir                          C:\\Users\\archbox\\Desktop\n     java.runtime.version              1.8.0_162-b12\n     java.awt.graphicsenv              sun.awt.Win32GraphicsEnvironment\n     java.endorsed.dirs                C:\\Program Files\\Java\\jdk1.8.0_162\\jre\\lib\\endo...\n     os.arch                           amd64\n     java.io.tmpdir                    C:\\Users\\archbox\\AppData\\Local\\Temp\\\n     line.separator\n\n     java.vm.specification.vendor      Oracle Corporation\n     user.variant\n     os.name                           Windows 10\n     sun.jnu.encoding                  Cp1252\n     java.library.path                 C:\\Program Files\\Java\\jdk1.8.0_162\\bin;C:\\Windo...\n     java.specification.name           Java Platform API Specification\n     java.class.version                52.0\n     sun.management.compiler           HotSpot 64-Bit Tiered Compilers\n     os.version                        10.0\n     user.home                         C:\\Users\\archbox\n     user.timezone\n     java.awt.printerjob               sun.awt.windows.WPrinterJob\n     file.encoding                     Cp1252\n     java.specification.version        1.8\n     java.class.path                   jarget\n     user.name                         archbox\n     java.vm.specification.version     1.8\n     sun.java.command                  jarget utils -prop\n     java.home                         C:\\Program Files\\Java\\jdk1.8.0_162\\jre\n     sun.arch.data.model               64\n     user.language                     en\n     java.specification.vendor         Oracle Corporation\n     awt.toolkit                       sun.awt.windows.WToolkit\n     java.vm.info                      mixed mode\n     java.version                      1.8.0_162\n     java.ext.dirs                     C:\\Program Files\\Java\\jdk1.8.0_162\\jre\\lib\\ext;...\n     sun.boot.class.path               C:\\Program Files\\Java\\jdk1.8.0_162\\jre\\lib\\reso...\n     java.vendor                       Oracle Corporation\n     sun.stderr.encoding               cp437\n     file.separator                    \\\n     java.vendor.url.bug               http://bugreport.sun.com/bugreport/\n     sun.io.unicode.encoding           UnicodeLittle\n     sun.cpu.endian                    little\n     sun.stdout.encoding               cp437\n     sun.desktop                       windows\n     sun.cpu.isalist                   amd64\n     -----------------------------     --------------------------------------------------\n\n#+END_SRC\n\n*** Show Path to Program \n\n - =$ jarget utils expath \u003cprogram\u003e=\n\n#+BEGIN_SRC sh \n$ jarget utils expath java\n/usr/bin/java\n\n$ jarget utils expath jarget\n/home/archbox/bin/jarget\n\n#+END_SRC\n\n*** Show Platform Information\n\n - jarget utils -info\n\nOutput on Linux:\n\n#+BEGIN_SRC text \n  $ jarget utils info\n\n  Operating System              = Linux\n  Operating System Version      = 4.14.16-200.fc26.x86_64\n  Operating System Architecture = amd64\n  Number of processors          = 4 cores\n  Processor endianess           = little\n\n  OS Path Separators and File Encoding\n\n  - path.separator  = ':'\n  - file.separator  = '/'\n  - line.separator  =  '\\n' - LF\n  - file.enconding  =  UTF-8\n\n  Java Runtime\n\n  - java.vm.specification.version = 1.8\n  - java.runtime.version          = 1.8.0_161-b14\n  - java.vm.name                  = OpenJDK 64-Bit Server VM\n  - java.home                     = /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.fc26.x86_64/jre\n\n\n#+END_SRC\n\nOutput on Windows 10:\n\n#+BEGIN_SRC text \n  C:\\Users\\archbox\\Desktop\u003ejava -jar jarget utils info\n\n  Operating System              = Windows 10\n  Operating System Version      = 10.0\n  Operating System Architecture = amd64\n  Number of processors          = 1 cores\n  Processor endianess           = little\n\n  OS Path Separators and File Encoding\n\n  - path.separator  = ';'\n  - file.separator  = '\\'\n  - line.separator  =  '\\r\\n' - CRLF\n  - file.enconding  =  Cp1252\n\n  Java Runtime\n\n  - java.vm.specification.version = 1.8\n  - java.runtime.version          = 1.8.0_162-b12\n  - java.vm.name                  = Java HotSpot(TM) 64-Bit Server VM\n  - java.home                     = C:\\Program Files\\Java\\jdk1.8.0_162\\jre\n\n#+END_SRC\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcaiorss%2Fjarget","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcaiorss%2Fjarget","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcaiorss%2Fjarget/lists"}