Создать проект Java и Kotlin с Maven

Создать проект Java и Kotlin с Maven

1. Вступление

В этом кратком руководстве мы увидим, как настроить спроектMaven , обрабатывающий источники какJava, так иKotlin.

Сначала создадим проект только для источниковJava. Затем мы также добавим дескрипторkotlin-maven-plugin toKotlin .

И, наконец, мы добавим несколько фиктивных классов, упакуем наше приложение и проверим, все ли работает должным образом.

2. Создать проект Java с Maven

Прежде всего,let’s create a straightforward Java project with Maven:

maven-java-kotlin
jar


    1.8



    
        
            org.apache.maven.plugins
            maven-compiler-plugin
            3.1
            
                ${java.version}
                ${java.version}
            
        
    

Этот файлpom содержит все, что нам нужно для компиляции исходных текстовJava и их упаковки в файлjar.

3. Добавить плагин Kotlin Maven

Теперь нам нужно настроить этот файлpom, чтобы он также мог обрабатывать источникиKotlin.

Давайте сначала добавимkotlin.version к нашим свойствам и kotlin-stdlib-jdk8 to our dependencies. Таким образом, у нас будет доступ к функциямKotlin:


    1.8
    1.2.51



    
        org.jetbrains.kotlin
        kotlin-stdlib-jdk8
        ${kotlin.version}
    

Затемwe need to add the kotlin-maven-plugin в наши плагиныMaven.

Мы настроим его для обработки целей какcompile, так иtest-compile, сообщая ему, где найти наши источники.

По соглашению мы храним источникиJava иKotlin в разных каталогах, хотя мы могли бы разместить их все в одном:


    kotlin-maven-plugin
    org.jetbrains.kotlin
    ${kotlin.version}
    
        
            compile
            
                compile
            
            
                
                    ${project.basedir}/src/main/kotlin
                    ${project.basedir}/src/main/java
                
            
        
        
            test-compile
            
                test-compile
            
            
                
                    ${project.basedir}/src/test/kotlin
                    ${project.basedir}/src/test/java
                
            
        
    

Это почти конец конфигурации. Нам нужноadapt maven-compiler-plugin configuration as we need Kotlin sources to be compiled before Java sources.

Часто выполнение плагиновMaven происходит в соответствии с порядком объявления. Поэтому мы должны разместитьmaven-compiler-plugin afterkotlin-maven-plugin. Но у первого есть два конкретных исполнения, которые выполняются раньше всего на этапах:default-compile иdefault-testCompile.

Нам нужно отключить их и вместо этого включитьjava-compile иjava-test-compile, чтобы гарантировать, что выполнениеkotlin-maven-plugin произойдет доmaven-compiler-plugin:


    org.apache.maven.plugins
    maven-compiler-plugin
    3.1
    
        ${java.version}
        ${java.version}
    
    
        
            default-compile
            none
        
        
            default-testCompile
            none
        
        
            java-compile
            compile
            
                compile
            
        
        
            java-test-compile
            test-compile
            
                testCompile
            
        
    

Мы можем видеть, что выполнение по умолчанию отключено с использованием фазыnone, а выполнение, специфичное дляJava, привязано к фазамcompile иtest-compile.

4. Скажи: «Привет, мир!» как с Java, так и с Kotlin

Теперь, когда мы все правильно настроили, давайте поздороваемся с миром… отJava иKotlin.

Для этого давайте создадим классApplication с методомmain() . Этот метод вызовет класс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 просто говорят «Hello World!»:

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"

Как мы видим, это вызывает классJavaService, который выводит на консоль «Java говорит« Hello World! »».

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

И этот вызывает классKotlinService, который печатает «Котлин говорит« Hello World! »».

5. Заключение

В этой статье мы сосредоточились на том, как создать проект Maven, обрабатывающий какJava, так иKotlin sources, компилируя и упаковывая их вjar.

Полный код можно просмотретьover on GitHub.