Введение В Kotlin И Создание Jar-Файлов С Помощью Maven

Это пост о том, как я познакомился с языком Kotlin, какие ресурсы и инструменты для этого использовал, как скомпилировал его в jar и запустил в консоли.

В общем, я PHP-программист с небольшим знанием Java. На днях я решил присмотреться к Котлину.

Это менее строго типизированный язык от JetBrains до такой степени, что он по существу статически типизирован.

В этом его главное принципиальное отличие от Java, плюс у Котлина свой приятный синтаксис.

Kotlin можно скомпилировать в JVM или JavaScript. Начнем знакомиться.

Сначала вам нужна идея IDE. http://www.jetbrains.com/idea/ Инструкция по установке также есть на сайте.

Версия 13+.

Внутри IDE я создал простой Java-проект. Далее вам необходимо установить плагин JetBrains для IDE. http://confluence.jetbrains.com/display/Kotlin/Getting+Started Плагин добавляет автодополнение и возможность создавать проекты Kotlin. Также добавлены инструменты для компиляции Kotlin. Особенность Kotlin в том, что он полностью совместим с Java. Те.

Код, написанный на Kotlin, можно вызывать на Java и наоборот. Поэтому все инструменты и библиотеки, которые используются для работы с Java, применимы и для Kotlin. Если проект в IDE изначально создан не Kotlin, то после установки плагина вы можете включить поддержку Kotlin. После включения в проект jar-библиотеки Kotlin будут добавлены в каталог /lib. Я включил Kotlin и написал следующий тестовый код в папке /src/testing:

  
  
  
  
   

//first.kt package testing /** * Created by seyfer on 26.03.14. */ //fun main(args : Array<String>) { // println("Hello, world!") //} //fun main(args : Array<String>) { // if (args.size == 0) { // println("Please provide a name as a command-line argument") // return // } // println("Hello, ${args[0]}!") //} /*fun main(args : Array<String>) { for (name in args) println("Hello, $name!") }*/ fun main(args: Array<String>) { val language = if (args.size == 0) "EN" else args[0] println(when (language) { "EN" -> "Hello!" "FR" -> "Salut!" "IT" -> "Ciao!" "seyfer" -> "seed!" else -> "Sorry, I can't greet you in $language yet" }) }

Я специально оставил комментарии в файле Kotlin. Это примеры со страницы http://confluence.jetbrains.com/display/Kotlin/Hello%2C+world%21 Для начала я отдельно запустил файл Kotlin в IDE, чтобы убедиться, что плагин работает и код скомпилирован.

Затем я создал класс Java:

//first.java package testing; /** * Created with IntelliJ IDEA. * User: seyfer * Date: 24.07.13 * Time: 21:02 * To change this template use File | Settings | File Templates. */ public class first { public static void main(String[] args) { System.out.print("Hello " + args[0] + "\n"); TestingPackage.main(args); } }

Здесь вы можете видеть, что я хочу взять аргумент и передать его непосредственно в Котлин.

В Котлине я использовал пример с языками и добавил еще один свой, который зависит от аргумента — моего ника.

В Java вы можете вызывать методы и получать доступ к переменным из Kotlin, вызывая PackageNamePackage.methodname().

Если правильно настроить выполнение проекта в IDE, то можно указать, с каким аргументом будет вызываться программа.

Но это очень неудобно; Я хотел бы изменить аргумент на лету, чтобы отловить ошибки для тестирования.

Мне нужно было создать банку для запуска с консоли.

В проекте изначально не было maven, поэтому я добавил его туда.

Эта страница помогла мне в этом.

http://confluence.jetbrains.com/display/Kotlin/Kotlin+Build+Tools Документация Kotlin достаточно информативна, чтобы изучить язык с ее помощью.

Также, что касается построения с использованием maven и gradle, вы можете увидеть следующие примеры.

https://github.com/JetBrains/kotlin-examples Вот мой файл pom.xml

<Эxml version="1.0" encoding="UTF-8"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd " xmlns=" http://maven.apache.org/POM/4.0.0 " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance "> <modelVersion>4.0.0</modelVersion> <groupId>org.jetbrains.kotlin.examples</groupId> <artifactId>idea_test</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>idea_test</name> <url> http://maven.apache.org </url> <properties> <kotlin.version>0.1-SNAPSHOT</kotlin.version> <junit.version>4.10</junit.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-stdlib</artifactId> <version>${kotlin.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <!-- Build an executable JAR --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>testing.first</mainClass> </manifest> </archive> </configuration> </plugin> <plugin> <artifactId>kotlin-maven-plugin</artifactId> <groupId>org.jetbrains.kotlin</groupId> <version>${kotlin.version}</version> <configuration><sourceDirs> < source > src/ < / s ource > </sourceDirs></configuration> <executions> <execution> <id>compile</id> <phase>process-sources</phase> <goals> <goal>compile</goal> </goals> </execution> <execution> <id>test-compile</id> <phase>process-test-sources</phase> <goals> <goal>test-compile</goal> </goals> </execution> </executions> </plugin> </plugins> </build> <repositories> <repository> <id>sonatype.oss.snapshots</id> <name>Sonatype OSS Snapshot Repository</name> <url> http://oss.sonatype.org/content/repositories/snapshots </url> <releases> <enabled>false</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>sonatype.oss.snapshots</id> <name>Sonatype OSS Snapshot Repository</name> <url> http://oss.sonatype.org/content/repositories/snapshots </url> <releases> <enabled>false</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> </project>

При этом используется настройка kotlin-maven-plugin, которая указывает, в каком каталоге искать файлы.

Также используется плагин maven-jar. Очень важно правильно написать < манифестировать > , иначе придется долго разбираться, почему jar не запускается с ошибкой" Нет основного атрибута манифеста ".

После сборки jar-файл проекта будет расположен в каталоге /target. В Idea есть отдельное окно maven-проектов, откуда удобно управлять конструкцией.

Для запуска jar обычно выполняется команда

java -jar /path/to/file.jar argument1 argument2

В моем случае это не сработало, потому что.

я не использовал плагин maven, который бы добавил в сборку jar-библиотеку Kotlin. Поэтому я получаю ошибку

java -jar target/idea_test-1.0-SNAPSHOT.jar 1 Hello 1 Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics

Теги: #ide #idea #jar #java #jetbrains #Kotlin #программирование #java #Kotlin

Вместе с данным постом часто просматривают: