コマンドでMavenからGradleに移行する方法

今まではJavaのビルドツールにMavenを使ってきたが、使いたいプラグインがGradleにしかなかったので移行することにした。

  • Maven
    • XMLファイルにビルド処理を記述
    • ビルドファイル -> pom.xml
  • Gradle
    • Groovyによるスクリプトとして記述される(Kotlinもある)
    • ビルドファイル -> build.gradle

個人的にはJavaに近い書き方ができるGradleを使いたいと以前から思っていた。良い機会なので移行してみる。

@Contents

移行手順

開発環境↓

  • macOS Catalina 10.15.7
  • Homebrew 2.6.1
  • Apache Maven 3.6.3
  • -> Gradle 6.7.1

-> HomebrewでGradleをインストール

% brew search gradle
==> Formulae
gradle                                                              gradle-completion                                                   gradle-profiler
==> Casks
qlgradle

brew searchコマンドで検索するとGradleがあったのでHomebrewでインストール。

% brew install gradle

installコマンドでインストール。これでgradleコマンドを使えるようになる。

-> pom.xmlをbuild.gradleに変換

% cd /Users/kiki/project/tipswatch/

先ずはcdコマンドでpom.xmlファイルがあるパスに移動。

% gradle init

Welcome to Gradle 6.7.1!

Here are the highlights of this release:
 - File system watching is ready for production use
 - Declare the version of Java your build requires
 - Java 15 support

For more details see https://docs.gradle.org/6.7.1/release-notes.html

Starting a Gradle Daemon (subsequent builds will be faster)

Found a Maven build. Generate a Gradle build from this? (default: yes) [yes, no] yes

Select build script DSL:
  1: Groovy
  2: Kotlin
Enter selection (default: Groovy) [1..2] 1


> Task :init
Maven to Gradle conversion is an incubating feature.
Get more help with your project: https://docs.gradle.org/6.7.1/userguide/migrating_from_maven.html

BUILD SUCCESSFUL in 59s
2 actionable tasks: 2 executed

プロジェクトのあるディレクトリに移動したらgradle initコマンドでbuild.gradleを生成する。途中でスクリプトは何にする?とか聞かれるので基本的にdefaultの方を選べばOK。最後にIDEでビルドすれば完了。参考までに比べてみた↓

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>jp.example</groupId>
    <artifactId>tipswatch</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <build>
        <sourceDirectory>src</sourceDirectory>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <warSourceDirectory>WebContent</warSourceDirectory>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <server>localhost</server>
                    <path>/tipswatch</path>
                    <url>http://localhost:8080/manager/text</url>
                    <update>true</update>
                    <username>admin</username>
                    <password>*****</password>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.45</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.2.13.Final</version>
        </dependency>
        <dependency>
            <groupId>org.apache.taglibs</groupId>
            <artifactId>taglibs-standard-impl</artifactId>
            <version>1.2.5</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>javax.servlet.jsp.jstl-api</artifactId>
            <version>1.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf</artifactId>
            <version>3.0.11.RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.16</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.0</version>
        </dependency>
    </dependencies>
</project>

Gradleの方はだいぶスッキリしている(他にもファイルはあるが)。ビルドするとエラーが発生するかもしれないが、そこは自己責任で。

To comment

@Contents
閉じる