Kotlinの紹介とMavenを使用したjarの作成

この投稿は、Kotlin言語に精通した方法、これに使用したリソースとツール、およびそれをjarにまとめてコンソールで起動した方法に関するメモです。



一般的に、私はPHPプログラマーであり、Javaに少し迷惑です。 先日、コトリンに会うことにしました。 これは、JetBrainsからは本質的に静的に型付けされるという点まで、それほど強く型付けされていない言語です。 これはJavaとの主な基本的な違いであり、Kotlinには独自の優れた構文があります。 KotlinはJVMまたはJavaScriptでコンパイルできます。



お互いを知りましょう。 まず、IDEのアイデアが必要です。



http://www.jetbrains.com/idea/



同じサイトのインストール手順。 バージョン13以降。



IDE内で、単純なJavaプロジェクトを作成しました。 次に、IDE用のJetBrainsプラグインをインストールする必要があります。

http://confluence.jetbrains.com/display/Kotlin/Getting+Started



プラグインは、オートコンプリートとKotlinプロジェクトを作成する機能を追加します。

Kotlinコンパイルツールも追加されています。



Kotlinの機能は、Javaと完全に互換性があることです。 つまり KotlinコードはJavaで呼び出すことができ、その逆も可能です。 したがって、Javaでの作業に使用されるすべてのツールとライブラリは、Kotlinにも適用できます。



IDEのプロジェクトが最初にKotlinによって作成されていない場合は、プラグインをインストールした後、Kotlinサポートを有効にできます。 プロジェクトに含めると、Kotlinライブラリのjarが/ 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



まず、プラグインが機能し、コードがコンパイルされることを確認するために、IDEでkotlinファイルを個別に実行しました。



次に、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); } }
      
      







ここで、引数を受け入れて直接Kotlinに渡したいことは明らかです。 Kotlinでは、言語の例を使用し、引数に依存する私の別の名前を追加しました-私のニックネーム。 Javaでは、PackageNamePackage.method name()を呼び出すことにより、Kotlinからメソッドを呼び出して変数にアクセスできます。



IDEでプロジェクトが正しく構成されている場合、プログラムを呼び出す引数を指定できます。 しかし、これはあまり便利ではありません。テストのために、エラーをキャッチするためにその場で引数を変更したいと思います。 コンソールから実行するjarを作成する必要がありました。

このプロジェクトには最初は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-pluginが使用されます。 < マニフェスト >を正しく設定することは非常に重要です。そうしないと、jarが「 メインマニフェスト属性なし 」エラーで開始しない理由を見つけるのに時間がかかります。

ビルド後、プロジェクトjarは/ターゲットディレクトリにあります。 Ideaには、建設を管理するのに便利な別のMavenプロジェクトウィンドウがあります。



jarを実行するには、通常、コマンドが実行されます



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







私の場合、これは機能しませんでした、なぜなら 私は、ビルドにkotlin jarライブラリーを追加するmavenプラグインを使用しませんでした。

したがって、エラーが発生します



 java -jar target/idea_test-1.0-SNAPSHOT.jar 1 Hello 1 Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics at testing.TestingPackage-first-39a20e2.main(first.kt:27) at testing.TestingPackage.main(first.kt:1) at testing.first.main(first.java:16) Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
      
      







ここから、Kotlinライブラリが見つからないことが明らかです。

jar依存関係などを示す正しい呼び出し



 java -cp target/idea_test-1.0-SNAPSHOT.jar:lib/kotlin-runtime.jar testing.first seyfer Hello seyfer seed!
      
      







これで、コードは正しく機能します。 ご覧のとおり、引数をjavaで受け取って出力し、それをkotlinに渡し、それに基づいてwhen構文を(スイッチケースのように見えるという意味で)解決しました。



ビルドに依存jarを含めてjarをビルドするには、mavenプラグイン-maven-dependency-pluginを使用できます。 またはonejar-maven-pluginからone-jarプロジェクトへ。



私はワンジャーを使用することにしました。

pom.xmlに追加する必要があるものは次のとおりです。
 <plugin> <groupId>org.dstovall</groupId> <artifactId>onejar-maven-plugin</artifactId> <version>1.4.5</version> <executions> <execution> <configuration> <binlibs> <fileSet> <directory>${project.build.directory}/../lib/</directory> <includes> <include>kotlin-runtime.jar</include> </includes> </fileSet> </binlibs> <!-- Optional, default is false --> <attachToBuild>true</attachToBuild> <!-- Optional, default is "onejar" --> <classifier>onejar</classifier> </configuration> <goals> <goal>one-jar</goal> </goals> </execution> </executions> </plugin> <pluginRepository> <id>onejar-maven-plugin.googlecode.com</id> <url>http://onejar-maven-plugin.googlecode.com/svn/mavenrepo</url> </pluginRepository>
      
      









次に、プロジェクトを再構築します。

 mvn package
      
      







プロジェクトname.one-jar.jarファイルが/ターゲットディレクトリに表示されます。 通常の方法で呼び出すことができます。



 java -jar target/idea_test-1.0-SNAPSHOT.one-jar.jar seyfer Hello seyfer seed!
      
      







これでプロジェクトのセットアップが完了しました。 上記のドキュメントリンクを使用して、Kotlinをさらに探索できます。

個人的に、私は言語が本当に好きでした。 間違いなく、それはそのニッチを占有し、PHPのバージョンとしてFacebookによって開発されたハック言語を占有します。



Kotlin公式ページ。

http://kotlin.jetbrains.org/



例付きのブラウザで実行するエディター。

http://kotlin-demo.jetbrains.com/



ところで、KotlinにはすでにWebフレームワークが記述されています。

http://karaframework.com/



All Articles