Giter VIP home page Giter VIP logo

npt's Introduction

npt

A SBT plug-in to create new projects layouts based on existing project templates.

Motivation

The np plug-in is a great way to initialize new SBT projects. This plug-in also let's you initialize project skeletons for new projects that are build with SBT. On top, it allows you to copy a pre-existing template into your new project structure. So let's say whenever you create a new project, you want the project layout to look like this:

|
|- src
|	- main
|		- scala
|			- com
|				- company
|					- Main.scala
|		- resources
|		- java
|	- test
|		- scala
|			- com
|				- company
|					- MainTest.scala
|		- resources
|			- db_schema.sql
|		- java
|- deploy
|	- fabfile.py
|build.sbt

For your default build.sbt you want it to contain the following rows:

organization := "com.company"

name := "<project_name>"

version := "1.0-SNAPSHOT"

scalaVersion := "2.10.4"

// resolvers
resolvers ++= Seq(
    "Sonatype (Snapshots)" at "http://oss.sonatype.org/content/repositories/snapshots",
    "Sonatype (Releases)" at "http://oss.sonatype.org/content/repositories/releases"
)

// publishing
credentials += Credentials(Path.userHome / ".ivy2" / ".credentials")

publishTo := {
    val nexus = "http://our.company.nexus:8081/"
    if (version.value.trim.endsWith("SNAPSHOT")) {
        Some("Snapshots" at nexus + "nexus/content/repositories/snapshots")
    } else {
        Some("Releases" at nexus + "nexus/content/repositories/releases")
    }
}

// dependencies
libraryDependencies ++= Seq(
    "com.company" %% "our.cool.utility-lib" % "1.0",
	"org.scalatest" %% "scalatest" % "2.1.3" % "test"
}

Of course you could always create a default SBT project and manually tweak everything - but that would be tedious. This plug-in aims to make it simpler for you.

Installation

Often you want to install this as a global plug-in. This is an AutoPlugin which requires SBT 0.13.5 or higher.

For sbt 0.13.5+

If you don't already have one, create an ~/.sbt/0.13/plugins directory. And inside of it, create a file npt.sbt containing the line

addSbtPlugin("me.rschatz" % "npt" % "0.2.0") 

Usage

There are several ways to use the npt plug-in.

Without specifying a template project to copy

This way, the plug-in behaves almost exactly like the np plug-in. It will create the src folder and subfolders and also a build.sbt file for you but nothing else.

$ mkdir newproject
$ cd newproject
$ sbt npt
$ [info] Creating source folders
$ [info] Creating build.sbt
$ [info] Finding template to copy
$ [info] Not copying a template

Directly specifying a template project to copy

It is possible to specify a downloadable archive (zip, gz or jar) or to point to a directory on the local file system. If invoking npt with a URL denoting an archive that can be downloaded, the plug-in will download the file to a temporary location, extract the file and copy it's content into your new project.

$ mkdir newproject
$ cd newproject
$ sbt npt http://our.company.nexus:8081/nexus/content/repositories/releases/me/company/sbt-project-templates/1.0/mvc.zip
$ [info] Creating source folders
$ [info] Creating build.sbt
$ [info] Finding template to copy
$ [info] Trying template name or location from input (http://our.company.nexus:8081/nexus/content/repositories/releases/me/company/sbt-project-templates/1.0/mvc.zip)
$ [info] Deleting pre-existing temporary folder
$ [info] Creating temporary folder (/tmp/NPT-DOWNLOAD)
$ [info] Unzipping to temporary folder

If invoking npt with a path denoting a directory on the local file system, the plug-in will copy it's content into your new project.

$ mkdir newproject
$ cd newproject
$ sbt npt D:\test
$ [info] Creating source folders
$ [info] Creating build.sbt
$ [info] Finding template to copy
$ [info] Trying template name or location from input (D:\test)
$ [info] Existing folder D:\test

Default template system property or environment variable

A default template can be specified as a system property (when running SBT) or as a environment variable. The name is SBT_NPT_DEFAULT_TEMPLATE and the value has to be a URL denoting an archive (zip, gz or jar) that can be downloaded OR a path denoting an existing directory on the local file system. If you have SBT_NPT_DEFAULT_TEMPLATE set you don't have to specify an additional argument when invoking npt.

$ mkdir newproject
$ cd newproject
$ sbt -DSBT_NPT_DEFAULT_TEMPLATE=D:\\test
$ npt
$ [info] Creating source folders
$ [info] Creating build.sbt
$ [info] Finding template to copy
$ [info] Trying SBT_NPT_DEFAULT_TEMPLATE (D:\test)
$ [info] URL: D:\test does not denote a downloadable archive
$ [info] Existing folder D:\test

Default folder system property or environment variable

Often you have a bunch of project templates to choose from, i.e. a api project template, a web project template and so on. For easy access to these project templates you can use the SBT_NPT_TEMPLATE_FOLDER system property or a environment variable of the same name. SBT_NPT_TEMPLATE_FOLDER must be an existing folder on the local file system. After specifying SBT_NPT_TEMPLATE_FOLDER you execute npt and specify the name of a sub-folder inside SBT_NPT_TEMPLATE_FOLDER. Let's say you have created the following folders.

|- /opt/sbt/templates 
				|- api					
				|- web
				|- service

Then you would create a new api project like this.

$ mkdir newproject
$ cd newproject
$ export SBT_NPT_TEMPLATE_FOLDER=/opt/sbt/templates
$ npt api
$ [info] Creating source folders
$ [info] Creating build.sbt
$ [info] Finding template to copy
$ [info] Trying SBT_NPT_TEMPLATE_FOLDER (/opt/sbt/templates)
$ [info] Existing folder /opt/sbt/templates/api

Customization

Similar to the np plug-in you can customize some values in the build.sbt file that gets generated. For full customization you can always have your own build.sbt file in the project template that you are applying, which will overwrite the generated build.sbt file. The following values can be customized in the default generated build.sbt file.

Setting Default Customization
name default.organization npt name:newapp
organization default-name npt org:me.company

npt's People

Contributors

reikje avatar

Stargazers

aaron avatar Nelanka Perera avatar Alexander Kahoun avatar Jason Chaffee avatar Gary Sieling avatar Tom Link avatar Ernest avatar  avatar

Watchers

 avatar James Cloos avatar

npt's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.