Spring 渐变+嵌入式码头

Spring 渐变+嵌入式码头,spring,hibernate,gradle,jetty,Spring,Hibernate,Gradle,Jetty,我已经修改了一个现有的码头项目,在我建造之后,我得到了404。也许我需要修改我不知道的其他文件。 我正在使用gradle来构建。这是build.gradle: apply plugin: 'java' apply plugin: 'jetty' apply plugin: 'eclipse' repositories { mavenCentral() } dependencies { compile 'org.springframework:spring-webmvc:4.1

我已经修改了一个现有的码头项目,在我建造之后,我得到了404。也许我需要修改我不知道的其他文件。 我正在使用gradle来构建。这是build.gradle:

apply plugin: 'java'
apply plugin: 'jetty'
apply plugin: 'eclipse'

repositories {
    mavenCentral()
}

dependencies {
    compile 'org.springframework:spring-webmvc:4.1.6.RELEASE'
    compile  'org.hibernate:hibernate-core:4.3.6.Final'
    testImplementation 'junit:junit:4.12'
    testCompile 'junit:junit:4.11'
    testCompile 'org.hamcrest:hamcrest-all:1.3'
    compile 'org.glassfish.jersey.containers:jersey-container-servlet:2.14'
}
test {
    exclude '**/*IntegrationTest*'
}

task integrationTest(type: Test) {
    include '**/*IntegrationTest*'
    doFirst {
        jettyRun.contextPath = '/';
        jettyRun.httpPort = 8080    // Port for test
        jettyRun.daemon = true
        jettyRun.execute()
    }
    doLast {
        jettyStop.stopPort = 8091   // Port for stop signal
        jettyStop.stopKey = 'stopKey'
        jettyStop.execute()
    }
}


// Embeded Jetty for testing
jettyRun{
    contextPath = "spring4"
    httpPort = 8080
}

jettyRunWar{
    contextPath = "spring4"
    httpPort = 8080
}


//For Eclipse IDE only
eclipse {

  wtp {
    component {

      //define context path, default to project folder name
      contextPath = 'spring4'

    }

  }
}
另一类:

package com.hello.webapp;

import javax.ws.rs.GET;
import javax.ws.rs.Path;

import com.hello.service.SignUpService;

@Path("/signUp")
public class SignUpWebapp {
    private static SignUpService signUpService = new SignUpService();

    @GET()
    public String hello() {
        return signUpService.sayHello();
    }
}
这里是简单的服务:

package com.hello.service;

public class SignUpService {

    public String sayHello() {
        return "signUp";
    }

}
这是集成测试类的另一个例子

package com.hello.webapp;

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;

import org.junit.Test;

public class SignUpIntegrationTest {
    private static String SIGNUP = "http://localhost:8080/signUp";

    @Test
    public void testHello() throws Exception {
        Client client = ClientBuilder.newClient();
        WebTarget webTarget = client.target(SIGNUP);
        String response = webTarget.request().get(String.class);

        assertThat(response, is("signUp"));
    }
}

所以,当我运行gradle integrationTest时,我得到一个错误,说Jetty已经在运行了。当我尝试访问localhost/注册时,我会得到一个404。

一个解决方案是使用gretty:

apply plugin: 'org.akhikhl.gretty'
....
classpath 'org.akhikhl.gretty:gretty:1.4.0'
...
gretty {
    port = 8083
    contextPath = '/'
    servletContainer = 'jetty9'
    jvmArgs = [
            '-Xms700m',
            '-Xmx2048m'
            ]
    loggingLevel='INFO'
    debugPort = 5005      // default
    debugSuspend = true   // default

    httpsEnabled = true
    httpsPort = 8443
    sslKeyStorePath = 'some.jks'
    sslKeyStorePassword = 'somepwd'
}
然后是gradle appStart

如果有帮助,请告诉我。

jetty插件已经过时,可能会被删除。您应该在任何任务上使用execute方法,这是非常不鼓励的。您应该使用dependsOn和finalizedBy定义任务执行顺序。