web-dev-qa-db-ja.com

Spring Boot + Spring-Loaded(IntelliJ、Gradle)

Spring Bootプロジェクトでホットスワップを使用したいと思います。このトピックを documentation でカバーしているにもかかわらず、どうにかしてIDE(IntelliJ)で実行することで動作させることができません。 VM属性を持つ私のメインメソッド:

-javaagent:/path/to/jar/springloaded.jar -noverify

私の質問は、どのように機能させるのですか? :-)

さらに質問は、GradleとIntelliJを搭載したスプリングの使用方法です。開発者にJARを手動でダウンロードさせ、どこかに置き、JVMパラメーターでそれを指すように強制するのは非常に不便です。より良い方法はありますか(ジョブを行う独自のタスクを設定し、IDE Gradleタスクとして)から実行する必要がありますか?

36
kuceram

ドキュメントに記載されているとおりにプロジェクトを構成する必要があります。

http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#howto-reload-springloaded-gradle-and-intellij-idea

その後、IDEを設定してbuild/classes/mainでコンパイル済みクラスを出力する必要があります(Ideaプラグインを使用すると、上記のリンクで指定されたoutputDirを設定し、gradle idea完了します)。

次に、タスクを起動(run/bootRun)するか、デバッグモードを使用してIDEからメインクラスを実行すると、クラスがcompiled

ここでの落とし穴は、Eclipseとは異なり、IntelliJが保存時にクラスを自動的にコンパイルしないことです(「保存時にビルド」するようにコンパイラーを構成しても、実行中/デバッグ中は実行しません)。これは明らかにIntelliJによって行われた設計決定です-ここに記載されているように Intellij IDEA Java保存時に自動コンパイルしないクラス (CrazyCoder answer )。

Spring Bootがソースコードファイルを監視し、変更時に再コンパイルするための構成オプションを提供するのが理想的です-これがGrailsの機能です。しかし、そのような考え方はまだ存在しておらず、おそらくそれをgradleと組み合わせることもできません。

したがって、私が知る限り、2つのオプションがあります。

  • 編集するものはすべてコンパイルすることを忘れないでください(前のStackOverflowリンクで提案されているように、より簡単なコンパイルショートカットを追加すると役立つ場合があります)。
  • ソースコードファイルで変更が検出されたときにgradle compileJava/compileGroovyを呼び出すファイルシステムモニター(Linuxの場合はinotify-tools、Mac OS Xの場合はその例です)を配置します。

最初は退屈で、2番目は遅いです:)。実際には、別のオプションがあります:IDE :-Dを変更します(またはEclipseMode IntelliJプラグインをインストールします)。

24
Deigote

IntelliJのみからアプリケーションを実行したい場合(メインメソッドで右クリック->デバッグを使用)、Spring BootのGradleタスクをまったく使用しない場合は、次の手順を実行するだけです。

  1. SpringLoadedエージェントを使用するように、IntelliJで実行構成を構成します。これは簡単で、次のスクリーンショットに例を示します。

enter image description here

VM Option-javaagent:/path/to/springloaded-${version}.jar -noverifyを追加したことに注意してください(ダウンロードできます ここ

  1. 次のスクリーンショットのように、右クリック->デバッグを使用してデバッグします。

enter image description here

  1. 変更を加えてリロードするたびに、プロジェクトをコンパイルするだけです。デフォルトのショートカットは Cntrl+F9、ただしメニューBuild-> Make Projectからもアクセスできます
25
geoand

MavenプロジェクトでIDEAを使用してこれを行うことができました。Gradleバージョンでも動作するはずです。私の手順は次のとおりでした。

  • 設定->コンパイラ->プロジェクトを自動的に作成(実行/デバッグしていない間のみ機能します!)
  • IDE(上記の文のためのトリック)以外のsprint-boot-pluginでプロジェクトを開始します。

Mavenプラグインのセットアップは次のようになります。

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <dependencies>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>springloaded</artifactId>
                    <version>1.2.0.RELEASE</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

次に、コードを変更してページをリロードします。

8

IntelliJ IdeaでSpringBootとGradleを実行しています。自動リロードは100%動作しています

  • 静的コンテンツが自動リロードされます(瞬時に)
  • Thymeleafは自動リロード中です(即座に)
  • コントローラ/ Javaファイルは「ビルド」ボタンを押す必要があります(数秒かかります)が、再起動は必要ありません-ファイルをコンパイルするだけなので、Spring Loadedがそれらを取得できます。

ステップ1:SpringLoadedを取得する

buildscript {
    repositories {
        mavenCentral()
        jcenter()
    }

    dependencies {
        classpath "org.springframework.boot:spring-boot-gradle-plugin:1.2.1.RELEASE"
        classpath 'org.springframework:springloaded:1.2.1.RELEASE'
    }
}

apply plugin: 'Java'
apply plugin: 'application'
apply plugin: 'idea'
apply plugin: 'spring-boot'

repositories {
    jcenter()
    mavenLocal()
    mavenCentral()
}

mainClassName = 'com.noxgroup.nitro.NitroApp'

idea {
    module {
        inheritOutputDirs = false
        outputDir = file("$buildDir/classes/main/")
    }
}

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web:1.2.1.RELEASE")
    compile("org.springframework.boot:spring-boot-starter-thymeleaf")
}

jar {
    baseName = 'org.noxgroup-nitro'
    version =  '0.1.0'
}

task wrapper(type: Wrapper) {
    gradleVersion = '1.11'
}

ステップ2:Application.propertiesを作成する

そして、以下を追加します:

spring.thymeleaf.cache=false

ステップ3:bootRunタスクを実行する

(標準の実行タスクだけでなく、これによりSpringLoaded機能が追加されます)

ステップ4:Javaのコンパイル

「プロジェクトの作成」を押すか、「Ctrl/Command + F9」を押して、Javaファイルを作成します

7
Spider

Gradleの以降のバージョンでは、コマンドウィンドウを起動して実行できます

gradle -t classes

これにより、ソースコードへの変更を探して再コンパイルするプロセスが開始されます。

別の実行で。

gradle bootRun

Javaまたはgroovy srcへの変更は自動的に再コンパイルされます。intellij固有ではありませんが、intellijを使用することをお勧めします。お気に入りのテキストエディタ(submlime、atom)。

クレジット/リンク

5
Matthew Payne