0

Gradle、Intellij、および Tomcat を使用して Spring レスト サービスを開発しています。再デプロイせずに変更をリロードしたいので、SpringLoaded を使用します。しかし、それは私のプロジェクトをリロードしません。ホットスワップでもダメ。これが私のbuild.gradleです:

def group = 'com.expecker'
version '1.0-SNAPSHOT'
apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'maven'
sourceCompatibility = 1.8
targetCompatibility = 1.8
def springVersion = '4.0.0.RELEASE'
def hibernateVersion = '5.0.7.Final'
def junitVersion = '4.11'
repositories {
    mavenCentral()
}
dependencies {
    testCompile group: 'junit', name: 'junit', version: junitVersion
    compile "org.springframework:spring-core:$springVersion"
    compile "org.springframework:spring-web:$springVersion"
    compile "org.springframework:spring-webmvc:$springVersion"
    compile "org.springframework:spring-orm:$springVersion"
    compile "org.springframework:spring-jdbc:$springVersion"
    compile "org.springframework:spring-tx:$springVersion"
    compile "org.springframework:spring-orm:$springVersion"
    compile "org.springframework:spring-context:$springVersion"
    compile 'javax.servlet:javax.servlet-api:3.1.0'
    compile 'jstl:jstl:1.2'
    compile 'javax.servlet.jsp:jsp-api:2.2'
//  compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.13' it seems like this library isn't compatible with spring 4.1.x
    compile 'com.fasterxml.jackson.core:jackson-databind:2.6.4'
    compile "org.hibernate:hibernate-core:$hibernateVersion"
    compile "org.hibernate:hibernate-entitymanager:$hibernateVersion"
    compile 'commons-dbcp:commons-dbcp:1.4'
    //compile('org.springframework:springloaded:1.2.5.RELEASE')
}
buildscript {
    repositories { jcenter() }
    dependencies {
        classpath 'org.springframework:springloaded:1.2.5.RELEASE'
    }
}
apply plugin: 'idea'
idea {
    module {
        inheritOutputDirs = false
        outputDir = file("$buildDir/classes/main/")
    }
}
/*
When built in OpenShift the 'openshift' profile will be used when
invoking mvn.
Use this profile for any OpenShift specific customization your app
will need.
By default that is to put the resulting archive into the 'webapps'
folder.
http://maven.apache.org/guides/mini/guide-building-for-different-environments.html
*/
gradle.buildFinished { buildResult ->
    println 'Building pom.xml...'
    pom {
        project {
            groupId "${group}"
            artifactId 'app'
            version "${version}"
            packaging 'war'
        }.withXml {
            asNode().appendNode('profiles').
                    appendNode('profile').with {
                appendNode('id', 'openshift')
                appendNode('build').with {
                    appendNode('finalName', 'expecker')
                    appendNode('plugins').appendNode('plugin').with {
                        appendNode('artifactId', 'maven-war-plugin')
                        appendNode('version', '2.1.1')
                        appendNode('configuration').with {
                            appendNode('outputDirectory', 'deployments')
                            appendNode('warName', 'expecker')
                        }
                    }
                }
            }
        }
    }.writeTo("pom.xml")}

私のTomcat構成には vm option があります-javaagent:|here is my path to springloaded.jar| -noverify。展開タブで展開されたアーティファクトを選択しました。

ご覧のとおり、スプリングロードされた jar をクラスパスに含めようとしました (なぜ必要なのかわかりません。いくつかの記事で見ました)。この jar をコンパイルの依存関係として追加しようとしましたが、プロジェクトをビルドできません。また、vmオプションでのみ設定し、含めないようにしました。ここにいくつかの私の観察があります:

  • 単純なホットスワップはスプリングロードされたエージェントでは機能しませんが、それなしでは機能します
  • Tomcat は\out\artifacts\expecker\exploded\expecker-1.0 - SNAPSHOT.war \ フォルダーを使用しているようですが、プロジェクトを作成すると\build \ フォルダーのみに変更が反映されます。


誰でも私を助けることができますか?

4

1 に答える 1

0

私のせいで、スプリングロードは新しいクラスの追加をサポートしていません。したがって、実際には、すべてが期待どおりに機能します。

于 2016-02-06T23:13:34.883 に答える