Webアプリケーションを構築するために、Spring MVC&BootおよびAngularJを評価しています。静的コンテンツ(html、js、css)を変更すると、毎回アプリケーションを再起動する必要があるという問題に遭遇しました。静的コンテンツの変更のためにアプリケーション全体を再起動するのは効率的ではないため、それを解決する方法があることを願っています。私が試した他のすべてのWebアプリフレームワークでは、静的コンテンツファイルをその場で更新できます(Spring MVCや単純な古いWARアプリケーションでも)。
「Spring Boot Actuatorを使用したRESTful Webサービスの構築」ガイド( http://spring.io/guides/gs/actuator-service/ )からプロジェクトをセットアップしました。基本的に、Spring BootとMVCコントローラーを使用してRESTサービスを作成します。さらに、「AngularJSでRESTful Webサービスを使用する」ガイド(- http:// spring .io/guides/gs/consuming-rest-angularjs / )AngularJSを使用してフロントエンドを構築します。RESTサービスからの応答を表示するWebページを作成します。唯一の変更私が行ったのは、リクエストが「 http://rest-service.guides.spring.io/greeting 」ではなく、アプリケーションに対して行われることです。静的コンテンツは「src/main/resources/public "フォルダー。この設定は、静的コンテンツを再ロードしないことを除いて、正常に機能します。
ドキュメントには、「すべての最新のIDEが静的リソースの再読み込みを許可し、通常はJavaクラスの変更)のホットスワップも許可しています」( https://docs.spring.io/spring-boot /docs/current-SNAPSHOT/reference/html/howto.html#howto-hotswapping )それは本当です。Eclipseはデフォルトで多かれ少なかれそれを行います。私はIntelliJユーザーではありませんが、自動的にビルドするように設定することもできます。
元の問題の要約
静的コンテンツ(html、js、css)に変更を加えると、毎回アプリケーションを再起動する必要があるという問題に遭遇しました
私は同じ問題を抱えていて、最終的に追加して解決しました
<configuration>
<addResources>true</addResources>
</configuration>
spring-boot-maven-plugin
の中に pom.xml
このspring-boot-devtoolsの事に混乱しましたが、私がやったことには何の効果もありませんでした。
静的コンテンツは「src/main/resources/public」フォルダーに保存されます。
あなたの道は大丈夫です。 src/main/resources/staticも大丈夫です。
ああ...私もこの問題に出くわしました。
静的コンテンツをクラスパスsrc/main/resources/public
フォルダーに配置する代わりに、他のJava Webアプリと同じようにsrc/main/webapp
に配置します。埋め込みTomcatは自動的にそれらが変わるたびにそれらをリロードします。
コメントで述べたように、デフォルト設定にはsrc\main\webapp
にあるリソースは含まれません。この問題を回避するには、pom.xml <build>
ノードに次を追加するだけです。
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/classes/static</outputDirectory>
<resources>
<resource>
<directory>src/main/webapp</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
リソースプラグインを使用すると、実行可能JARを実行してローカル開発を行うことができます。
Java -jar target/.jar
実行中に、Chrome Dev ToolsまたはIDEを使用して、再起動せずにファイルを変更できます。ただし、ビルドを実行するたびに、生成されたパッケージには、src\main\webapp
のsrc\main\resources\static
の下にあるすべてのファイルが含まれます。
同僚と私もこの問題に出会いました。 IntelliJ documentation ...で答えを見つけました.
メインメニューで、Run |を選択します。変更されたクラスの再読み込み
私のソリューション(Kotlinで書かれていますが、非常に明白です):
@Controller
class WebController : WebMvcConfigurerAdapter() {
override fun addResourceHandlers(registry: ResourceHandlerRegistry) {
System.getProperty("resources.local.path")?.let {
registry.addResourceHandler("/**").addResourceLocations(it)
}
}
...
}
主なアイデアは、条件付きで独自のリソースハンドラを追加できることです。例えば。いくつかのシステムプロパティが設定されている場合(resources.local.path)、プロパティの値を使用してリソースの場所を追加します。次に、開発時にこのプロパティを「-Dresources.local.path = file:/ Users/andrey/Projects/gsp-test/src/main/resources/static /」などの適切な値に設定します。
末尾のスラッシュを忘れないでください。
私は同じ問題を抱えていました、ここで提案された解決策は論理的であり、breifで私のために働いた:1- ctrl + shift + A 2-レジストリの検索3- "compiler.automake.allow.when.app。実行中」と確認してください http://garywaddell.com/2015/11/20/spring-boot-intellij-idea-not-reloading-static-content/
依存関係をもう1つ追加するだけで実行できます
あなたグラドル
compile group: 'org.springframework.boot', name: 'spring-boot-devtools', version: '1.3.0.RELEASE'
あなたの中にPom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<version>1.3.0.RELEASE</version>
</dependency>
最終的に使用したのは Browsersync with grunt でした。 browsersyncとgruntは、ディスク上の静的リソースを監視し、ファイルを編集するとブラウザーを更新します。一種のプロキシとして機能します。これにより、UIの変更をビルドまたは再起動せずにすぐに確認できます。
Grunt、browsersync、spring boot、angularjsは、プロジェクトのセットアップに使用した JHipster を使用すると設定されます。
確かに、これにはIDEよりもはるかに多くのツールが必要であり、さらに複雑なので、すべてのプロジェクトにこれを推奨することはありません。
spring-boot-devtoolsは、not編集された静的htm/jsの「ホットデプロイ」のソリューションです。
Intellij内でWebファセットを構成して、resources/static内のhtml/jsファイルを編集するときに、intellijが更新されたファイルを./targetにコピーし、内部で起動したスプリングブートアプリケーションがそのコンテンツを自動的に表示するように設定しました
https://www.jetbrains.com/help/idea/2016.2/configuring-static-content-resources.html を参照してください
@eigilは、MavenビルドのaddResources
構成を実現しました。私はgradleビルドでspring-boot-gradle-plugin
を使用していますが、これを見つけました Spring Boot github issue 、およびSpring Boot doc このオプションも述べました 。このディレクティブをbuild.gradleに追加し、GradleタスクbootRun
を実行するだけで、リソースファイルが保存されるとすぐに更新されます。ご参考までに。
Java @viatorの回答のバージョン:
@Configuration
class WebMvcConfigurer extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/dist/*.js").addResourceLocations(
"file:src/main/TypeScript/dist/"
);
}
}
1.5.8.RELEASEを使用しています。
特に静的ファイルまたはjspファイルの変更を即座に更新します。
Mavenを使用している場合。これをpom.xmlに追加する必要があります
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
そして、これでSpring Bootを起動する必要があります:
mvn clean spring-boot:run
完全な例と詳細はこちら https://www.surasint.com/spring-boot-with-auto-update-changed-files-example/
Eclipseの場合、最小構成として[プロジェクト]-> [自動的にビルド]オプションをアクティブにする必要があります。
静的なWebコンテンツを提供する方法は2つあります
解決策1)を選択した場合-静的Webコンテンツがそのjar内にあるため、jarを安全にコピーできます。サーバーが変更を取得するようにするには、(自動)ホットスワップを行う必要があります。
解決策2)を選択した場合-すべてがそのまま使用でき、すべての変更が自動的に選択されます。ただし、最終的なjarを別の場所にコピーすると、動作が停止します。 application.properties
で絶対パスを指定しない限りです。例えば:
spring.resources.static-locations=file:///C:/myspringbootapp/src/main/webapp
したがって、解決策2)は簡単ですが、移植性が低くなります。解決策1)は移植可能ですが、使用するのがより困難です(ide config)。