1. 序章

このクイックチュートリアルでは、JavaKotlinの両方のソースを処理するMavenプロジェクトを設定する方法を説明します。

まず、Javaソースのみのプロジェクトを作成します。 次に、 kotlin-maven-plugin を追加して、Kotlinも処理します。

最後に、ダミークラスをいくつか追加し、アプリケーションをパッケージ化して、すべてが期待どおりに機能するかどうかをテストします。

2. MavenでJavaプロジェクトを作成する

まず、 Mavenを使用して簡単なJavaプロジェクトを作成しましょう:

<artifactId>maven-java-kotlin</artifactId>
<packaging>jar</packaging>

<properties>
    <java.version>1.8</java.version>
</properties>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>${java.version}</source>
                <target>${java.version}</target>
            </configuration>
        </plugin>
    </plugins>
</build>

このpomファイルには、Javaソースをコンパイルしてjarファイルにパッケージ化するために必要なものがすべて含まれています。

3. KotlinMavenプラグインを追加する

次に、この pom ファイルを調整して、Kotlinソースも処理できるようにする必要があります。

まず、プロパティに kotlin.version を追加し、依存関係kotlin-stdlib-jdk8を追加しましょう。 このようにして、Kotlinの機能にアクセスできるようになります。

<properties>
    <java.version>1.8</java.version>
    <kotlin.version>1.2.51</kotlin.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.jetbrains.kotlin</groupId>
        <artifactId>kotlin-stdlib-jdk8</artifactId>
        <version>${kotlin.version}</version>
    </dependency>
</dependencies>

次に、kotlin-maven-pluginMavenプラグインに追加する必要があります。

compiletest-compileの両方の目標を処理するように構成し、ソースの場所を指定します。

慣例により、JavaソースとKotlinソースはすべて同じディレクトリに配置できますが、異なるディレクトリに保持されます。

<plugin>
    <artifactId>kotlin-maven-plugin</artifactId>
    <groupId>org.jetbrains.kotlin</groupId>
    <version>${kotlin.version}</version>
    <executions>
        <execution>
            <id>compile</id>
            <goals>
                <goal>compile</goal>
            </goals>
            <configuration>
                <sourceDirs>
                    <sourceDir>${project.basedir}/src/main/kotlin</sourceDir>
                    <sourceDir>${project.basedir}/src/main/java</sourceDir>
                </sourceDirs>
            </configuration>
        </execution>
        <execution>
            <id>test-compile</id>
            <goals>
                <goal>test-compile</goal>
            </goals>
            <configuration>
                <sourceDirs>
                    <sourceDir>${project.basedir}/src/test/kotlin</sourceDir>
                    <sourceDir>${project.basedir}/src/test/java</sourceDir>
                </sourceDirs>
            </configuration>
        </execution>
    </executions>
</plugin>

これで構成はほぼ終了です。 Javaソースの前にKotlinソースをコンパイルする必要があるため、maven-compiler-plugin構成を適応させる必要があります。

多くの場合、 Maven プラグインの実行は、宣言の順序に従って行われます。 したがって、maven-compiler-pluginkotlin-maven-pluginの後に配置する必要があります。 ただし、前者には、フェーズ中に他のすべての前に実行される2つの特定の実行があります。default-compiledefault-testCompileです。

[X119X]の前にkotlin-maven-pluginの実行が行われるようにするには、それらを無効にし、java-compilejava-test-compileを有効にする必要があります。 maven-compiler-plugin:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
        <source>${java.version}</source>
        <target>${java.version}</target>
    </configuration>
    <executions>
        <execution>
            <id>default-compile</id>
            <phase>none</phase>
        </execution>
        <execution>
            <id>default-testCompile</id>
            <phase>none</phase>
        </execution>
        <execution>
            <id>java-compile</id>
            <phase>compile</phase>
            <goals>
                <goal>compile</goal>
            </goals>
        </execution>
        <execution>
            <id>java-test-compile</id>
            <phase>test-compile</phase>
            <goals>
                <goal>testCompile</goal>
            </goals>
        </execution>
    </executions>
</plugin>

フェーズnoneを使用すると、デフォルトの実行が無効になり、Java固有の実行がcompileおよびtest-compileにバインドされていることがわかります。フェーズ。

4. 「HelloWorld!」と言います JavaとKotlinの両方

すべてが正しく設定されたので、JavaKotlinの両方から世界に挨拶しましょう。

そのためには、 main()メソッドを使用してApplicationクラスを作成しましょう。 このメソッドは、最初の引数に従って、JavaまたはKotlinクラスを呼び出します。

public class Application {

    static String JAVA = "java";
    static String KOTLIN = "kotlin";

    public static void main(String[] args) {
        String language = args[0];
        switch (language) {
            case JAVA:
                new JavaService().sayHello();
                break;
            case KOTLIN:
                new KotlinService().sayHello();
                break;
            default:
                // Do nothing
                break;
        }
    }
}

JavaServiceクラスとKotlinServiceクラスは、単に「HelloWorld!」と言っています。

public class JavaService {

    public void sayHello() {
        System.out.println("Java says 'Hello World!'");
    }

}
class KotlinService {

    fun sayHello() {
        System.out.println("Kotlin says 'Hello World!'")
    }

}

これで、 mvn package コマンドを呼び出して、アプリケーションをコンパイルおよびパッケージ化できます。

ターミナルで次のコマンドを実行して、生成されたjarをテストしてみましょう。

java -cp maven-java-kotlin-1.0.0-SNAPSHOT.jar path.to.your.Class "java"

ご覧のとおり、これは Java Service クラスを呼び出し、コンソールに「Javaは「HelloWorld!」と表示します」と出力します。

java -cp maven-java-kotlin-1.0.0-SNAPSHOT.jar path.to.your.Class "kotlin"

そして、これは KotlinService クラスを呼び出し、「Kotlinは「HelloWorld!」と言います」と出力します。

5. 結論

この記事では、JavaKotlinソースの両方を処理するMavenプロジェクトを作成し、それらをコンパイルしてjarにパッケージ化する方法に焦点を当てました。

完全なコードは、GitHubを調べることができます。