2016-10-26 6 views
0

프로젝트 구성을 위해 war 파일을 빌드하는 데 maven 플러그인을 사용했습니다. 나는 전쟁 파일을 확인할 때 나는이 전쟁 파일을 실행할 때 그리고 지금, 나는 어떤 이유로 오류WAR 파일을 실행하는 중 오류가 발생했습니다.

Error: Could not find or load main class com.abc.HelloWorld.App 

를 얻을, 내 메인 클래스 내가 시도 WEB-INF/classes/com/abc/HelloWorld/

에서 생성지고는에 클래스 경로를 추가 Manifest.MF 파일이지만 도움을받지 못했습니다.

다음은 war 파일을 만드는 내 maven 플러그인입니다. 또한이 프로젝트에는 임베디드 부두가 포함되어 있습니다.

<plugin> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.1.1</version> 
    <configuration> 
    <webXml>WebContent\WEB-INF\web.xml</webXml> 
    <warName>${project.artifactId}-${project.version}</warName>    
    <archive> 
     <manifest> 
     <addClasspath>true</addClasspath> 
     <mainClass>com.infor.HelloWorld.App</mainClass> 
     </manifest> 
    </archive> 
    <overlays> 
    <overlay> 
    <id>com.abc.HelloWorld</id>  
    <type>jar</type> 
    </overlay> 
    </overlays> 
    </configuration> 
    <executions> 
    <execution> 
     <id>default-war</id> 
     <phase>package</phase> 
     <goals> 
     <goal>war</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

나는 this question을 시도했지만 도움이되지 않았습니다.

답변

1

웹 애플리케이션 WAR 파일은 웹 컨테이너가 배포 될 수 있도록 패키지화 된 특수한 jar 파일입니다.

자기 실행 가능한 war 파일을 가질 수 있지만 META-INF/MANIFEST.MF 및 그 Main-Class이 Jetty를 인스턴스화 할 수 있도록 JAR 동작이 겹쳐진 WAR 파일이있는 경우 해당 웹 인스턴스 자체에 해당 Server 인스턴스로로드합니다. .

부두 프로젝트가 관리하는 다음 프로젝트를 살펴보십시오.

  • 는 WAR 파일에 서버 클래스를 병합하는 서버 클래스 경로 및 웹 애플리케이션 클래스 경로 사이에 클래스를 중복에 대한 (웹 애플리케이션 배포에 실패하게하지 :

    https://github.com/jetty-project/embedded-jetty-live-war

    이 때주의하는 것이 중요하다).

  • 병합 META-INF/services/ 파일
  • HTTP에 자체 실행 파일의 Server 측면을 너무 많이 노출되지 클라이언트는 (그들에게 민감한 아무것도를 다운로드하지 않습니다!) - 이것은이 시작의 서버 부분을 넣어 수행 할 수 있습니다 /WEB-INF/ 디렉토리
  • 당신은 웹 애플리케이션 (전쟁) 시작 걷고 (이 웹 애플리케이션 클래스 로더에 다시 한 번 서버 클래스 로더에 두 번 초기화를 야기 할 수 있습니다)
서버 구성 요소에 대해 알고를하고 싶지 않아

해당 프로젝트에 명시된 바와 같이 :

이 프로젝트는 자체 실행 WAR 파일의 관점에서 Embedded Jetty 사용을 조사하는 사람들을위한 기준선을 제공해야합니다.

이 프로젝트는 4 개 가지 주요 부분이 있습니다

  • /thewebapp/ - 그것의 기본 형식으로 존재하는이 정상 받는다는 <packaging>war</packaging> 단지 WAR 파일입니다 생산 된 유물로, WAR 파일, 웹 애플리케이션이다 그것은 (아직) 자체 실행되지 않습니다.
  • /theserver/ - 이것은 Jetty 서버 및 웹 애플리케이션을 초기화하기 위해 사용자 정의하는 Embedded Jetty Server jetty.livewar.ServerMain.main(String args[])입니다. 이 프로젝트는 또한 JDBC 서버 라이브러리, JNDI, 로깅 등을 사용자 정의 할 수있는 곳입니다.이 프로젝트는 서버를 실행하는 데 필요한 모든 의존성을 가진 uber-jar를 생성합니다. maven-shade-plugin을 사용하여 META-INF/services/ 개의 파일을 병합하는 데 특별한주의를 기울입니다.
  • /server-bootstrap/ - 여기에는 라이브 워해머의 콘텐츠로 LiveWarClassLoader을 설정하고이 새로운 ClassLoader에서 을 실행하는 2 개의 작은 클래스가 포함되어 있습니다. 이 프로젝트에는 라이브 WAR가 필요로하는 라이브 META-INF/MANIFEST.MF도 포함되어 있습니다.
  • /livewar-assembly/ - 이것은 위의 3 개 프로젝트를 Live/Executable WAR 파일로 연결하는 프로젝트입니다. 위의 3 개 프로젝트의 산출물은 maven-assembly-plugin에 의해 풀리고 가장 기능적이고 안전한 곳에 배치됩니다. 예를 들어 /theserver/의 서버 클래스는 /WEB-INF/jetty-server/에 배치되어 WAR 파일에 액세스하는 웹 클라이언트에서 액세스 할 수 없게 만듭니다.

주 : 3 개 파일은이 설정을 사용하는 경우이 파일과 같은 정적 콘텐츠 웹 클라이언트를 다운로드 할 수있는 당신이 알아야 할 새로운 조립 WAR 파일에 존재있다.

  • /jetty/bootstrap/JettyBootstrap.class
  • /jetty/bootstrap/LiveWarClassLoader.class
  • /META-INF/MANIFEST.MF

예제 프로젝트는 이러한 부트 스트랩 파일에 존재하는 정보가 서버 또는 작업에 대한 개인 또는 민감한 정보를 공개하지 않도록하는 방식으로 설정되어 . Webapp은 Live/Executable WAR 파일로 시작할 수 있습니다.