내가하려고하는 것은 내 프로젝트가 포함 된 실행 파일 JAR
을 빌드하는 것입니다. 나는 바로 옆에, 또한 JAR
파일의 종속성을 포함, 그래서 내 디렉토리 목록은 다음과 같이 보입니다 : 내가 알고 제대로 내 응용 프로그램 기능으로 내 문제는, 의존성에서 발생하지 않는다는 것을 확신JAR 파일의 임베디드 jetty 서버 시작하기
~/Projects/Java/web-app/out:
web-app.jar
dependency1.jar
dependency2.jar
dependency3.jar
을 , 제티가 임베디드를 시작할 때까지
나는 부두를 시작하기 위해 사용하는 코드는 다음과 같다 :
public class ServerExecutionGoal implements ExecutionGoal {
private final static Logger logger = Logger.getLogger(ServerExecutionGoal.class);
private WebAppContext getWebAppContext() throws IOException {
WebAppContext context = new WebAppContext();
System.out.println("context = " + context);
context.setResourceBase(new PathMatchingResourcePatternResolver().getResource("classpath:/webapp").getURL().toExternalForm());
context.setContextPath("/");
context.setLogger(new StdErrLog());
return context;
}
@Override
public void execute(Map<String, Object> stringObjectMap) throws ExecutionTargetFailureException {
logger.info("Instantiating target server ...");
final Server server = new Server(8089);
final ContextHandlerCollection handlerCollection = new ContextHandlerCollection();
try {
handlerCollection.setHandlers(new Handler[]{new RequestLogHandler(), getWebAppContext()});
} catch (IOException e) {
throw new ExecutionTargetFailureException("Could not create web application context", e);
}
server.setHandler(handlerCollection);
try {
logger.info("Starting server on port 8089 ...");
server.start();
server.join();
logger.info("Server started. Waiting for requests.");
} catch (Exception e) {
throw new ExecutionTargetFailureException("Failed to properly start the web server", e);
}
}
public static void main(String[] args) throws ExecutionTargetFailureException {
new ServerExecutionGoal().execute(null);
}
}
나는 "웹 애플리케이션"폴더가 /webapp
내 JAR 내부에 제대로 이전됩니다 것을 확인하고, 수 (내 IDE를 통해 코드를 실행할 때 IntelliJ IDEA 11) context.setResourceBase(new PathMatchingResourcePatternResolver().getResource("classpath:/webapp").getURL().toExternalForm())
은 문제의 리소스에 유효하게 매핑됩니다. 또한 다음과 같이 해결할 수 있습니다.
jar:file:~/Projects/Java/web-app/out/web-app.jar!/webapp
액세스 할 수 있습니다 (읽었습니다). 그러나
, 내 응용 프로그램의 주요 방법을 시작하고 부두가 나는 다음과 같은 얻을 http://localhost:8089
에 시작 :
HTTP ERROR: 503
Problem accessing /. Reason:
Service Unavailable
Powered by Jetty://
어디서 잘못된 것입니까?
"resourceBase"를 "."로 설정하면됩니다. 주소 "http://localhost:8089
"은 "~/Projects/Java/web-app/out/
"위치에 대한 인터페이스로 작동하며 여기에서 다운로드 할 곳을 클릭하면 "web-app.jar
"을 포함한 모든 JAR
파일의 목록을 볼 수 있습니다.
나는 다음과 같은 질문을 볼 수 있고, 답변이 적용되지 않습니다
- Embedded jetty application not working from jar :
Start.class.getProtectionDomain().getCodeSource()
이null
로 확인 이후는 NullPointerException이 얻을. - Embedded Jetty WebAppContext FilePermission issue : 권한 문제 (필자는 파일 목록을 얻을 수 있다는 사실을 증명할 수있는 사실)가 없으므로이 질문에 대한 답변은 없지만 상황은 분명히 적용되지 않습니다.
- embedding jetty server problems : 또한 답이 없습니다. 종속성에 대한 문제가 없으므로이 또한 적용 할 수 없습니다 (앞에서 설명한 내용 참조).
나는 어떻게 든 내 src/main/resources/
디렉토리 아래에있는 내 웹 응용 프로그램에 번들로 제공되는 /webapp
폴더를 액세스 할 부두를 활성화해야한다고 생각합니다. 번들 된 웹 애플리케이션을 버리고 전개 된 컨텍스트 경로를 대신 Jetty가 액세스 할 수있는 곳에 배치해야합니다 (이는 나와 내 고객에게 여러 가지 문제점을 제기하므로 바람직하지 않습니다).
당신은 WAR 파일과 context.setWar (...)를 사용할 수 있습니다. 이렇게하면 배포본에 하나의 파일 만 추가됩니다. –
나는 비슷한 문제에 직면하고있다. 서버가 일식에서 시작될 때 요청에 대한 적절한 응답을 얻고있다.하지만 cmd의 jar 파일에서 실행하면 404가 발생한다. –