Spring Bootプロジェクトでホットスワップを使用したいと思います。このトピックを documentation でカバーしているにもかかわらず、どうにかしてIDE(IntelliJ)で実行することで動作させることができません。 VM属性を持つ私のメインメソッド:
-javaagent:/path/to/jar/springloaded.jar -noverify
私の質問は、どのように機能させるのですか? :-)
さらに質問は、GradleとIntelliJを搭載したスプリングの使用方法です。開発者にJARを手動でダウンロードさせ、どこかに置き、JVMパラメーターでそれを指すように強制するのは非常に不便です。より良い方法はありますか(ジョブを行う独自のタスクを設定し、IDE Gradleタスクとして)から実行する必要がありますか?
ドキュメントに記載されているとおりにプロジェクトを構成する必要があります。
その後、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つのオプションがあります。
最初は退屈で、2番目は遅いです:)。実際には、別のオプションがあります:IDE :-Dを変更します(またはEclipseMode IntelliJプラグインをインストールします)。
IntelliJのみからアプリケーションを実行したい場合(メインメソッドで右クリック->デバッグを使用)、Spring BootのGradleタスクをまったく使用しない場合は、次の手順を実行するだけです。
VM Option
:-javaagent:/path/to/springloaded-${version}.jar -noverify
を追加したことに注意してください(ダウンロードできます ここ )
Build
-> Make Project
からもアクセスできますMavenプロジェクトでIDEAを使用してこれを行うことができました。Gradleバージョンでも動作するはずです。私の手順は次のとおりでした。
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>
次に、コードを変更してページをリロードします。
IntelliJ IdeaでSpringBootとGradleを実行しています。自動リロードは100%動作しています
ステップ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ファイルを作成します
Gradleの以降のバージョンでは、コマンドウィンドウを起動して実行できます
gradle -t classes
これにより、ソースコードへの変更を探して再コンパイルするプロセスが開始されます。
別の実行で。
gradle bootRun
Javaまたはgroovy srcへの変更は自動的に再コンパイルされます。intellij固有ではありませんが、intellijを使用することをお勧めします。お気に入りのテキストエディタ(submlime、atom)。