[英]Embedded jetty application built by gradle always returns a 500 (internal server error) when launched from jar
我遇到了一個我不太了解的問題。
我編寫了最簡單的jetty
application:HelloWorldJetty
,該application:HelloWorldJetty
綁定到port 8080
並始終在http
請求上返回'Hello World'
。
使用gradle配置構建。 當我使用gradle支持netbeans插件調試應用程序時,它可以工作,並且我得到世界的回應。
現在,當我構建jar並使用java -jar
HelloWorldJetty.jar
執行它時,它確實綁定到port 8080
但是所有響應的status 500 - internal server error
均為status 500 - internal server error
。
我以前從未使用過嵌入式服務器,因此感覺好像丟失了一些東西。 一直在尋找幾天。
這是主要的課程:
package com.helloworldjetty;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.AbstractHandler;
/**
*
* @author george
*/
public class HelloWorldJetty {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
try {
Server server = new Server(8080);
server.setHandler(new AbstractHandler() {
@Override
public void handle(String string, Request rqst, HttpServletRequest hsr, HttpServletResponse hsr1) throws IOException, ServletException {
hsr1.setContentType("text/html;charset=utf-8");
hsr1.setStatus(HttpServletResponse.SC_OK);
rqst.setHandled(true);
hsr1.getWriter().println("<h1>Hello World</h1>");
}
});
server.start();
server.join();
} catch (Exception e) {
e.printStackTrace(System.out);
}
}
}
這是我的gradle構建腳本:
apply plugin: 'java'
sourceCompatibility = '1.7'
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
// NetBeans will automatically add "run" and "debug" tasks relying on the
// "mainClass" property. You may however define the property prior executing
// tasks by passing a "-PmainClass=<QUALIFIED_CLASS_NAME>" argument.
//
// Note however, that you may define your own "run" and "debug" task if you
// prefer. In this case NetBeans will not add these tasks but you may rely on
// your own implementation.
if (!hasProperty('mainClass')) {
ext.mainClass = 'com.helloworldjetty.HelloWorldJetty'
}
repositories {
mavenCentral()
// You may define additional repositories, or even remove "mavenCentral()".
// Read more about repositories here:
// http://www.gradle.org/docs/current/userguide/dependency_management.html#sec:repositories
}
dependencies {
// TODO: Add dependencies here ...
// You can read more about how to add dependency here:
// http://www.gradle.org/docs/current/userguide/dependency_management.html#sec:how_to_declare_your_dependencies
compile group: 'javax', name: 'javaee-api', version: '7.0'
compile group: 'commons-beanutils', name: 'commons-beanutils', version: '1.8.3'
compile group: 'commons-httpclient', name: 'commons-httpclient', version: '3.1'
compile group: 'commons-collections', name: 'commons-collections', version: '3.2.1'
compile group: 'org.apache.velocity', name: 'velocity', version: '1.7'
compile group: 'commons-codec', name: 'commons-codec', version: '1.9'
compile group: 'commons-io', name: 'commons-io', version: '2.4'
compile group: 'com.google.guava', name: 'guava', version: 'r07'
compile group: 'commons-lang', name: 'commons-lang', version: '2.5'
compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.3.3'
compile group: 'org.apache.httpcomponents', name: 'httpmime', version: '4.3.3'
compile group: 'javax.mail', name: 'javax.mail-api', version: '1.5.4'
compile group: 'com.googlecode.libphonenumber', name: 'libphonenumber', version: '6.2.2'
compile group: 'org.slf4j', name: 'jcl-over-slf4j', version: '1.6.1'
compile group: 'org.slf4j', name: 'slf4j-api', version: '1.6.1'
compile group: 'org.slf4j', name: 'slf4j-jdk14', version: '1.6.1'
compile group: 'commons-fileupload', name: 'commons-fileupload', version: '1.2.2'
compile group: 'commons-validator', name: 'commons-validator', version: '1.4.0'
compile group: 'org.apache.httpcomponents', name: 'httpcore', version: '4.3.2'
compile group: 'org.apache.httpcomponents', name: 'httpcore-nio', version: '4.1'
compile group: 'org.eclipse.jetty.aggregate', name: 'jetty-all', version: '9.3.4.RC0'
compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.20'
compile group: 'com.google.code.svenson', name: 'svenson', version: '1.3.8'
testCompile group: 'junit', name: 'junit', version: '4.10'
}
jar {
from(configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }) {
exclude "META-INF/*.SF"
exclude "META-INF/*.DSA"
exclude "META-INF/*.RSA"
}
manifest {
attributes 'Implementation-Title': 'HelloWorldJetty',
'Implementation-Version': 1.0,
'Built-By': System.getProperty('user.name'),
'Built-Date': new Date(),
'Built-JDK': System.getProperty('java.version'),
'Main-Class': 'com.helloworldjetty.HelloWorldJetty'
}
}
如果有人可以闡明這個問題,我將非常感謝。
對於Jetty服務器,可以有一個自執行的uber-jar。
Jetty Project甚至維護着一個embedded-jetty-uber-jar
示例項目,以證明這一點。
他們還維護了一個embedded-jetty-live-war
示例,該示例使戰爭文件也可以自動執行。
但是,這些示例都將maven與uber-jar maven插件一起使用。
注意:Jetty項目的工作人員有2位Apache Maven提交者
現在到您的gradle構建。
不要在您的構建中使用jetty-all
工件( 這不是該工件的用途 )
對所需的功能/模塊使用特定的工件。
使用Jetty的穩定/發行版本
9.3.0.RC0
不穩定,這是不穩定的候選版本。
截至2015年10月27日,當前穩定的Jetty版本為9.3.5.v20151012
將您的webapp元數據(如果有的話)合並到uber-jar中
META-INF/services
合並到您的uber-jar中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.