Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

andrewoma/kotlin-script

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

This project is no longer supported.

See https://github.com/holgerbrandl/kscript for an actively maintained alternative.

Kotlin Scripting Support

Provides scripting support for Kotlin on *nix-based systems. e.g.

#!/usr/bin/env kotlins
println("Hello from Kotlin!")
for (arg in args) {
    println("arg: $arg")
}

Installation

Assuming you have ~/bin and kotlinc-jvm in your PATH:

$ curl -s https://raw.githubusercontent.com/andrewoma/kotlin-script/master/kotlins > ~/bin/kotlins && chmod u+x ~/bin/kotlins

Otherwise, download the kotlins script to any location in your PATH.

If you're looking for kotlinc-jvm, it is available via homebrew or 1.0.5 can be downloaded from here.

Features

  • Runs kotlin scripts with or without a main method (wrapping in a main method automatically if required)
  • Runs standard kotlin source files (or modules), compiling automatically
  • Caches compiled scripts. "Hello, world" will take around 3s on the first run and 200ms thereafter.
  • Supports a classpath option, automatically building the appropriate kotlin module on the fly.

Limitations

  • Cygwin is supported, but the script is quite slow due to the high overhead of launching processes under Windows.
  • For modules, the module main method must be in a file called main.kt.

Examples

There are various examples in the examples directory. Here are a subset of them:

A script with an explicit main method:

#!/usr/bin/env kotlins

fun main(args: Array<String>) {
    Hello().sayHello()
}

class Hello {
    fun sayHello() {
        println("Hello from Kotlin!")
    }
}

A script using a classpath. Note: Using #!/usr/bin/env with options does not work across platforms. Either the actual path to the command must be used, or using indirection as shown below.

#!/bin/sh 
exec kotlins -DmySysProp=somevalue -cp log4j-1.2.14.jar "$0" "$@"
!#
import org.apache.log4j.*

val logger = Logger.getLogger("mymodule").sure();

fun main(args: Array<String>) {
    BasicConfigurator.configure();
    logger.info("Hello from Kotlin via log4j! mySysProp=${System.getProperty("mySysProp")}")
}

Running a standard kotlin source file:

$ kotlins mykotlinfile.kt

mvncp

In response to #1, I've included mvncp in the extras folder. mvncp is a utility that can resolve classpaths from maven repositories (automatically downloading and resolving transitive dependencies if required). It requires ruby and maven to be installed and included in your PATH.

Example: resolving a classpath

$ mvncp org.springframework:spring-core:3.1.1.RELEASE

Will write write the following to the stdout

/Users/andrew/.m2/repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar:/Users/andrew/.m2/repository/org/springframework/spring-asm/3.1.1.RELEASE/spring-asm-3.1.1.RELEASE.jar:/Users/andrew/.m2/repository/org/springframework/spring-core/3.1.1.RELEASE/spring-core-3.1.1.RELEASE.jar

Example: show the dependency tree

$ mvncp --tree org.springframework:spring-core:3.1.1.RELEASE
org.springframework:spring-core:jar:3.1.1.RELEASE
   org.springframework:spring-asm:jar:3.1.1.RELEASE
   commons-logging:commons-logging:jar:1.1.1

mvncp can be used in conjunction with the kotlin script as follows:

#!/bin/sh 
exec kotlins -DmySysProp=somevalue -cp `mvncp log4j:log4j:1.2.14` "$0" "$@"
!#
import org.apache.log4j.*

val logger = Logger.getLogger("mymodule").sure();

fun main(args: Array<String>) {
    BasicConfigurator.configure();
    logger.info("Hello from Kotlin via log4j! mySysProp=${System.getProperty("mySysProp")}")
}

Alternatives

kotlin-scripting-kickstarter provides a Gradle based alternative. The main advantage of the kickstarter approach is that it supports full IDE development of scripts.

Status

Last verified Kotlin version: 1.0.5

About

Support for using Kotlin as a scripting language

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  
Morty Proxy This is a proxified and sanitized view of the page, visit original site.