• Stars
    star
    144
  • Rank 234,915 (Top 5 %)
  • Language
    Scala
  • Created over 12 years ago
  • Updated over 7 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

SBT Plugin to create a "start" script to run the program

Consider sbt-native-packager instead

The more general native-packager plugin may replace this one in the future: https://github.com/sbt/sbt-native-packager

The rough way to get a start script with sbt-native-packager, modulo any details of your app, is:

  1. add sbt-native-packager plugin to your project
  2. remove start-script-plugin
  3. add settings(com.typesafe.sbt.SbtNativePackager.packageArchetype.java_application: _*)
  4. stage task will now generate a script target/universal/stage/bin/project-name instead of target/start
  5. the sbt-native-packager-generated script looks at a java_opts env var but you cannot pass Java opts as parameters to the script as you could with target/start
  6. the sbt-native-packager-generated script copies dependency jars into target/, so you don't need the Ivy cache

Many were using sbt-start-script with Heroku, sbt-native-packager has two tricky things on Heroku right now:

  1. Heroku sets JAVA_OPTS and not java_opts. See sbt/sbt-native-packager#47 and sbt/sbt-native-packager#48 ... for now you have to manually configure java_opts and not specify memory options, or hack sbt-native-packager.
  2. You need to hack the build pack to drop the Ivy cache, or your slug will be bloated or even exceed the max size.

Also of course you have to change your Procfile for the new name of the script.

About this plugin (sbt-start-script)

This plugin allows you to generate a script target/start for a project. The script will run the project "in-place" (without having to build a package first).

The target/start script is similar to sbt run but it doesn't rely on SBT. sbt run is not recommended for production use because it keeps SBT itself in-memory. target/start is intended to run an app in production.

The plugin adds a task start-script which generates target/start. It also adds a stage task, aliased to the start-script task.

stage by convention performs any tasks needed to prepare an app to be run in-place. Other plugins that use a different approach to prepare an app to run could define stage as well, while start-script is specific to this plugin.

The target/start script must be run from the root build directory (note: NOT the root project directory). This allows inter-project dependencies within your build to work properly.

Details

To use the plugin with SBT 0.12.x:

addSbtPlugin("com.typesafe.sbt" % "sbt-start-script" % "0.9.0")

You can place that code in ~/.sbt/plugins/build.sbt to install the plugin globally, or in YOURPROJECT/project/plugins.sbt to install the plugin for your project.

To use with SBT 0.13.x:

addSbtPlugin("com.typesafe.sbt" % "sbt-start-script" % "0.10.0")

Note: the global directory for 0.13.x is ~/.sbt/0.13 instead of ~/.sbt.

If you install the plugin globally, it will add a command add-start-script-tasks to every project using SBT. You can run this command to add the tasks from the plugin, such as start-script (the start-script task won't exist until you add-start-script-tasks).

If you incorporate the plugin into your project, then you'll want to explicitly add the settings from the plugin, such as the start-script task, to your project. In this case there's no need to use add-start-script-tasks since you'll already add them in your build.

Here's how you add the settings from the plugin in a build.sbt:

import com.typesafe.sbt.SbtStartScript

seq(SbtStartScript.startScriptForClassesSettings: _*)

In an SBT "full configuration" you would do something like:

settings = SbtStartScript.startScriptForClassesSettings

You have to choose which settings to add from these options:

  • startScriptForClassesSettings (the script will run from .class files)
  • startScriptForJarSettings (the script will run from .jar file from 'package')
  • startScriptForWarSettings (the script will run a .war with Jetty)

startScriptForWarSettings requires https://github.com/siasia/xsbt-web-plugin/ to provide the package-war task.

If you have an aggregate project, you may want a stage task even though there's nothing to run, just so it will recurse into sub-projects. One way to get a stage task that does nothing is:

SbtStartScript.stage in Compile := Unit

which sets the stage key to Unit.

Key names

Note that all the keys (except stage) are in the SbtStartScript.StartScriptKeys object, so the scala version of the start-script key is SbtStartScript.StartScriptKeys.startScript. This is the standard convention for sbt plugins. Do an import SbtStartScript.StartScriptKeys._ if you want all the keys unprefixed in your scope. Then, if you want to change a setting, you can simply reference the key directly in your `build.sbt'.

For example, to change the filename of the generated script to something other than target/start (which is controlled by the key SbtStartScript.StartScriptKeys.startScriptName), add the following to build.sbt after the above import statement:

startScriptName <<= target / "run"

Migration from earlier versions of xsbt-start-script-plugin

After 0.5.2, the plugin and its APIs were renamed to use consistent conventions (matching other plugins). The renamings were:

  • the plugin itself is now sbt-start-script not xsbt-start-script-plugin; update this in your plugins.sbt
  • the Maven group and Java package are now com.typesafe.sbt rather than com.typesafe.startscript; update this in your plugins.sbt and in your build files
  • the plugin object is now SbtStartScript rather than StartScriptPlugin, update this in your build files
  • if you used any keys directly, they are now inside a nested object StartScriptKeys so for example rather than writing startScriptFile you would write StartScriptKeys.startScriptFile or you need to import StartScriptKeys._
  • StartScriptKeys.startScriptFile did not match the string name of that settings start-script-name so now you should use StartScriptKeys.startScriptName

License

sbt-start-script is open source software licensed under the Apache 2.0 License.

Contribution policy

Contributions via GitHub pull requests are gladly accepted from their original author. Before sending the pull request, please agree to the Contributor License Agreement at http://typesafe.com/contribute/cla (it takes 30 seconds; you use your GitHub account to sign the agreement).

More Repositories

1

sbt

sbt, the interactive build tool
Scala
4,685
star
2

sbt-native-packager

sbt Native Packager
Scala
1,577
star
3

sbt-dependency-graph

sbt plugin to create a dependency graph for your project
Scala
1,246
star
4

sbt-jmh

"Trust no one, bench everything." - sbt plugin for JMH (Java Microbenchmark Harness)
Scala
774
star
5

sbt-eclipse

Plugin for sbt to create Eclipse project definitions
Scala
721
star
6

sbt-release

A release plugin for sbt
Scala
630
star
7

sbt-buildinfo

I know this because build.sbt knows this.
Scala
541
star
8

sbt-web

Library for building sbt plugins for the web
Scala
365
star
9

sbt-git

A git plugin for sbt
Scala
342
star
10

zinc

Scala incremental compiler library, used by sbt and other build tools
Scala
316
star
11

docker-sbt

Official sbt docker images
Dockerfile
301
star
12

sbt-dynver

An sbt plugin to dynamically set your version from git
Scala
286
star
13

sbt-ci-release

sbt plugin to automate Sonatype releases from GitHub Actions
Scala
270
star
14

sbt-onejar

Packages your project using One-JAR™
Scala
268
star
15

sbt-scalariform

sbt plugin adding support for source code formatting using Scalariform
Scala
259
star
16

sbt-fresh

sbt-plugin to create an opinionated fresh sbt project
Scala
235
star
17

sbt-header

sbt-header is an sbt plugin for creating file headers, e.g. copyright headers
Scala
190
star
18

sbt-github-actions

An sbt plugin which makes it easier to build with GitHub Actions
Scala
185
star
19

sbt-bintray

fresh packages delivered from your sbt console
Scala
180
star
20

sbt-site

Site generation for sbt
Scala
176
star
21

sbt-protobuf

sbt plugin for compiling protobuf files
Scala
173
star
22

sbt-pgp

PGP plugin for sbt
Scala
141
star
23

sbt-groll

sbt plugin to roll the Git history
Scala
134
star
24

junit-interface

Implementation of sbt's test interface for JUnit
Java
132
star
25

sbt-unidoc

sbt plugin to create a unified Scaladoc or Javadoc API document across multiple subprojects.
Scala
124
star
26

sbt-jni

SBT Plugin to ease working with JNI
Scala
122
star
27

sbt-jacoco

an sbt plugin for JaCoCo Code Coverage
Scala
122
star
28

sbt-projectmatrix

Scala
114
star
29

sbt-boilerplate

sbt plugin for generating scala.Tuple/Function related boilerplate code
Scala
110
star
30

sbt-proguard

Proguard sbt plugin
Scala
100
star
31

sbt-atmos

sbt plugin for running Typesafe Console in development
Scala
98
star
32

sbt-launcher-package

Packaging for sbt so you can run it.
Scala
90
star
33

sbt-dirty-money

clean Ivy2 cache
Scala
87
star
34

sbt-license-report

Report on licenses used in an sbt project.
Scala
85
star
35

sbt-doge

sbt plugin to aggregate tasks across subprojects and their crossScalaVersions
Scala
78
star
36

sbt-pom-reader

Translates xml -> awesome. Maven-ish support for sbt.
Scala
74
star
37

sbt-aspectj

AspectJ sbt plugin
Scala
73
star
38

sbt-remote-control

Create and manage sbt process using unicorns and forks
Scala
73
star
39

website

The source for scala-sbt.org
Scala
73
star
40

sbt-scalabuff

SBT plugin which generate case classes and support for serialization from Google Protocol Buffer definitions using ScalaBuff
Scala
72
star
41

contraband

http://www.scala-sbt.org/contraband/
Scala
68
star
42

sbt-s3

sbt-s3 is a simple sbt plugin to manipulate objects on Amazon S3
Scala
62
star
43

sbt-multi-jvm

Multi-JVM testing in sbt
Scala
53
star
44

sbt-javaagent

sbt plugin for adding java agents to projects
Scala
51
star
45

sbt-cpd

Copy & Paste Detector plugin using PMD for sbt.
Scala
49
star
46

sbt-findbugs

FindBugs static analysis plugin for sbt.
Scala
47
star
47

sbt-man

Looks up scaladoc.
Scala
46
star
48

sbt-osgi

sbt plugin for creating OSGi bundles
Scala
46
star
49

librarymanagement

librarymanagement module for sbt
Scala
46
star
50

ipcsocket

IPC: Unix Domain Socket and Windows Named Pipes for Java
Java
42
star
51

io

IO module for sbt
Scala
41
star
52

sbt-less

Scala
41
star
53

sbt-js-engine

Support for sbt plugins that use JavaScript
Scala
40
star
54

launcher

The sbt launcher as its own project. Can launch any ivy/maven published project with a main class, with some fancy features.
Scala
40
star
55

sbt-autoversion

Scala
34
star
56

sbt-digest

sbt-web plugin for checksum files
Scala
30
star
57

sbt-jupiter-interface

Implementation of SBT's test interface for JUnit Jupiter
Java
29
star
58

sbt-slash

unified slash syntax for both shell and build.sbt
Scala
29
star
59

sbt-avro

sbt plugin for compiling Avro schemas, similar to sbt-protobuf
Java
26
star
60

sbt-java-formatter

An sbt plugin for formating Java code
Scala
25
star
61

sbt-unique-version

emulates Maven's uniqueVersion snapshots
Scala
24
star
62

sbt-gzip

sbt-web plugin for gzipping assets
Scala
24
star
63

sbt.github.com

See https://github.com/sbt/website for the source
HTML
22
star
64

sbt-duplicates-finder

Find classes and resources conflicts in your build
Scala
22
star
65

sbt-pull-request-validator

Plugin that optimizes pull request validation to only validate sub projects that have changed
Scala
21
star
66

sbt-autoplugin.g8

giter8 template for sbt 0.13.5+ AutoPlugin
Scala
20
star
67

sbt-cucumber

Cucumber plugin for SBT.
Scala
20
star
68

sbt-jcstress

Trust no-one, and especially not memory visibility.
HTML
19
star
69

sbt-sriracha

Scala
18
star
70

adept

adept helps you find, declare, and download dependencies. http://groups.google.com/group/adept-dev/
18
star
71

sbt-mocha

SBT plugin for running mocha JavaScript unit tests on node
Scala
17
star
72

util

util modules for sbt
Scala
15
star
73

sbt-export-repo

exports your dependency graph to a preloaded local repository
Scala
15
star
74

sbt-xjc

SBT plugin to compile an XML Schema with XJC
Scala
14
star
75

sbt-multi-release-jar

Support for JDK9's Multi Release JAR Files (JEP 238)
Scala
14
star
76

sbt-nocomma

sbt-nocomma reduces commas from your build.sbt.
Scala
13
star
77

serialization

serialization facility for sbt
Scala
13
star
78

sbt-core-next

sbt APIs targeted for eventual inclusion in sbt core
Scala
12
star
79

sbt-houserules

House rules for sbt modules.
Scala
12
star
80

sbt-maven-resolver

An sbt plugin to resolve dependencies using Aether
Scala
11
star
81

sbt-pamflet

sbt plugin to run Pamflet (and Pamflet plugin to run sbt)
Scala
11
star
82

sbt-appbundle

A plugin for the simple-build-tool to create an OS X application bundle.
Scala
10
star
83

sbt-sdlc

Scaladoc link checker for sbt
Scala
10
star
84

bintry

your packages, delivered fresh
Scala
10
star
85

sbt-fmpp

FreeMarker Scala/Java Templating Plugin for SBT
Scala
9
star
86

sbt-ynolub

Scala
9
star
87

sbt-testng

Implementation of the sbt testing interface for TestNG, bundled with an sbt plug-in for convenience.
Scala
9
star
88

sbt-concat

sbt-web plugin for concatenating web assets
Scala
8
star
89

sbt-ant

SBT plug-in to call Ant targets from within SBT builds
Scala
7
star
90

sbtn-dist

Shell
6
star
91

sbt-community-plugins

All community plugins that opt into an uber-build
Scala
6
star
92

helloworld-one

An example build for sbt 1.0.0.
Scala
5
star
93

sbt-giter8-resolver

Scala
5
star
94

sbt-vimquit

an sbt plugin that adds :q command.
Scala
4
star
95

sbt-sequential

adds sequential tasks to sbt
Scala
4
star
96

sbt-scalashim

generates sys.error.
Scala
4
star
97

sbt-experimental

Experimental APIs to fix rough edges in sbt
Scala
3
star
98

sbt-web-build-base

Scala
3
star
99

sbt-validator

Builds sbt 1.0.x against recent versions of the sbt modules
Shell
3
star
100

sbt-dbuild

Scala
3
star