2012-07-01 2 views
2

스프링 MVC 및 최대 절전 모드 응용 프로그램을위한 다중 maven 모듈이 있습니다. 다음과 같이Spring MVC가 포함 된 Embedded Jetty

내 레이아웃은 다음과 같습니다

/myapp-web 
/myapp-web/src/main/java 
/myapp-web/src/main/webapp 
/myapp-web/src/main/webapp/web-inf 
/myapp-web/src/main/webapp/web-inf/web.xml 
/myapp-web/src/main/webapp/web-inf/web-context.xml (spring wiring code etc) 
/myapp-web/src/main/webapp/web-inf/config/hibernate.cfg.xml 
/myapp-web/src/main/webapp/assets/... (folder for css, javascript, images) 
/myapp-web/src/main/webapp/views (folders with freemarker .ftl files) 

내 pom.xml 파일 :

.. 
    <packaging>war</packaging> 
    .. 
    <dependency> 
     <artifactId>jetty-server</artifactId> 
     <groupId>org.eclipse.jetty</groupId> 
     <version>${jetty-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-servlet</artifactId> 
     <version>${jetty-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-webapp</artifactId> 
     <version>${jetty-version}</version> 
    </dependency> 

내가 성공적으로 설치 및 I 실행할 수있는 임베디드 부두의 다른 인스턴스가 있습니다. 심지어 우분투에서 작동하도록 시작/정지 스크립트를 설정했습니다. 이것은 봄 mvc 응용 프로그램이 아니었기 때문에 web.xml 파일 등이 없기 때문에 더 쉬웠습니다. /assembly/assembly.xml 파일을 만들었습니다. spring mvc 응용 프로그램에 대해이 작업을 수행해야합니까? 또한?

그때 내 pom.xml 파일 플러그인 섹션이 추가

:

  <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>${maven-assembly-plugin}</version> 
      <configuration> 
       <descriptors> 
        <descriptor>src/main/assembly/assembly.xml</descriptor> 
       </descriptors> 
      </configuration> 
     </plugin> 
     <!-- jar plugin --> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>${maven-jar-plugin}</version> 
      <configuration> 
       <archive> 

       </archive> 
      </configuration> 
     </plugin> 
     <!-- jetty plugin --> 
     <plugin> 
      <!-- This plugin is needed for the servlet example --> 
      <groupId>org.mortbay.jetty</groupId> 
      <artifactId>jetty-maven-plugin</artifactId> 
      <version>${jetty-version}</version> 
     </plugin> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>exec-maven-plugin</artifactId> 
      <version>1.1</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>java</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <mainClass>com.myapp.HttpServer</mainClass> 
      </configuration> 
     </plugin> 

내가 내 스프링 MVC 응용 프로그램에 대한 동일한 작업을 수행해야합니까?

나는 stackoverflow에서 약간 threads을 찾았지만 개미를 사용하고 있지는 않지만 개미 부분을 이해할 수는 없습니다. 나는 또한 그것을 Maven과 함께 작동하도록 이식하는 방법을 모르겠다.

단일 서블릿 예제 이외에 이것을 수행하는 방법에 대한 좋은 참고 자료가 없다는 것에 놀랐다.

이 작업을 수행하려면 /assembly/assembly.xml 파일을 만들어야합니까, 아니면 웹 응용 프로그램과 다른가?

누군가 내가 이것을 설명 할 수 있도록 단계별로 설명해 주시겠습니까? 는 요청하시기 바랍니다 그리고 난 내 프로젝트에 필요한 아무것도 게시 할 예정입니다,하지만 난 내 현재의 환경이 모두, 즉 덮여 생각 :이

  • 스프링 MVC 최대 절전 모드 멀티 받는다는 설정을 사용하여

    • 템플릿 프리 마커는
    • 폴더 구조가 목표

    위에 주어진이 워싱턴을 배포 할 수있다 r 파일을 만들고, 시작/정지 스크립트를 만들어 내 서버에 배포하고 부두 인스턴스를 시작/중지 할 수 있습니다.

  • +0

    표준 maven 프로젝트 레이아웃 (당신이하는 것처럼 보이기 만하면), maven jetty : run 명령은 .war을로드하는 대신 해당 경로에서 웹 응용 프로그램을 선택합니다. 간단한 프로젝트에서 필자는 추가 구성이 필요 없으며 테스트 및 개발에 충분했습니다. 생산 된 제품을 전개해야하는 경우.전쟁, [카고 플러그인] (http://cargo.codehaus.org/Maven2+plugin)을 한번보세요. – Pyranja

    +0

    mvn jetty : run 명령을 사용하여 부두를 로컬에서 실행하지 않으려 고합니다.이 명령은 배포 용입니다. – Blankman

    답변

    7

    assembly.xml 파일이 필요하지 않습니다.

    부두는 웹 응용 프로그램을 시작하는 데 사용됩니다. 따라서 메인 클래스에 Jetty 서버를 만들고 웹 응용 프로그램 컨텍스트를 추가하고 서버를 시작해야합니다. 두 가지 방법으로 문제를 해결할 수 있습니다 : - "일반적인"Java EE 서버와 같은 web.xml을 작성하고이 설명자를 귀하의 Jetty 서버에 추가하십시오. - 서블릿 컨텍스트가 프로그래밍 방식 인 메인 클래스에서 Spring 컨텍스트를로드하십시오. https://github.com/s4nchez/jetty-spring-mvc-jar

    1

    assembly.xml 파일은 주로 zip 파일을 만드는 데 사용됩니다. 간단한 웹 아카이브의 경우 war 파일의 정상적인 구조만으로 충분합니다.

    다중 모듈 예제를 요청했습니다. 나는 app fuse examples을 찾을 것을 제안합니다.심지어 애플 리케이션 퓨즈 프레임 워크를 사용하지 않는, 그것은 maven 파일의 좋은 구조가 있습니다. 빠른 시작으로 다중 모듈 hibernate spring mvc 응용 프로그램을 만들었습니다.

    이것은 프로젝트의 디렉토리 구조입니다.

    D:. 
        core 
         src 
          main 
           java 
           resources 
            META-INF 
        src 
         site 
        web 
         src 
          main 
           java 
            com 
            mycompany 
             webapp 
              controller 
              filter 
              jsp 
              listener 
              search 
              spring 
              taglib 
              util 
          resources 
           META-INF 
          webapp 
           common 
           decorators 
           images 
           scripts 
            calendar 
           WEB-INF 
    

    이것은 웹 프로젝트 pom.xml과 관련된 부분입니다.

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    
    <modelVersion>4.0.0</modelVersion> 
    
    <parent> 
        <groupId>com.mycompany</groupId> 
        <artifactId>myproject</artifactId> 
        <version>1.0-SNAPSHOT</version> 
        <relativePath>../pom.xml</relativePath> 
    </parent> 
    
    <artifactId>web</artifactId> 
    <packaging>war</packaging> 
    
    <build> 
        <plugins> 
         <plugin> 
          <groupId>org.mortbay.jetty</groupId> 
          <artifactId>maven-jetty-plugin</artifactId> 
          <version>6.1.26</version> 
          <configuration> 
           <contextPath>/</contextPath> 
           <scanIntervalSeconds>3</scanIntervalSeconds> 
           <scanTargetPatterns> 
            <scanTargetPattern> 
             <directory>src/main/webapp/WEB-INF</directory> 
             <excludes> 
              <exclude>**/*.jsp</exclude> 
             </excludes> 
             <includes> 
              <include>**/*.properties</include> 
              <include>**/*.xml</include> 
             </includes> 
            </scanTargetPattern> 
           </scanTargetPatterns> 
          </configuration> 
         </plugin> 
        </plugins> 
    ... 
    <dependencies> 
        <dependency> 
         <groupId>${project.parent.groupId}</groupId> 
         <artifactId>core</artifactId> 
         <version>${project.parent.version}</version> 
        </dependency> 
    ... 
    </dependencies> 
    </project> 
    

    이것은 핵심 프로젝트에 종속되어 있습니다. 다중 모듈 프로젝트를 컴파일 할 때마다 필요한 모든 부분이 있습니다. 그러나 웹 프로젝트 디렉토리에서만 작업해야하는 경우. 코어 디렉토리에 mvn install을 실행해야합니다.이 방법은 로컬 저장소에 설치되고 웹 프로젝트에서 사용할 수 있습니다. 핵심 프로젝트를 변경 한 경우 기본 디렉토리에서 컴파일해야합니다. 그렇지 않으면 웹 프로젝트 디렉토리의 maven을 정상적으로 사용할 수 있습니다.

    여기서 알 수 있듯이 assembly.xml 파일이 필요하지 않습니다. WAR 파일보다 복잡한 구조의 경우 assembly.xml 파일을 사용해야합니다 (예 : 포함 할 사용자 정의 설치 관리자 구조). 전쟁 파일, 도움말 파일, 웹 서버 실행 파일, 모든 파일을 함께 저장하는 설치 프로그램 파일.

    메인 디렉토리에서 mvn package 명령을 사용하여 war 파일을 만들 수 있습니다. 또한 부두를 사용할 수 있습니다 : 부두를 실행하고 웹 응용 프로그램을 테스트하려면 웹 프로젝트 디렉토리에서 명령을 실행하십시오.

    0

    필자는 최소한의 변경으로 사용할 수 있다고 생각되는 설정과 매우 유사합니다. 저는 Maven, Spring, Hibernate, Freemarker 등으로 webapp을 실행하고 있습니다. assembly.xml이나 ant 태스크가 필요하지 않습니다.

    내 접근 방식은 응용 프로그램을 jar 파일로 패키지하는 것입니다. 이 항아리에는 부두를 시작하고 본질적으로 전쟁으로 전개하는 주요 수업이 있습니다. 자세한 내용은 여기를 참조하십시오 :

    :이 클래스는 쉽게 사용자 정의 할 수 있습니다

    http://draconianoverlord.com/2009/01/10/war-less-dev-with-jetty.html

    는 내가이 개 좋은 선택이 있다고 생각 응용 프로그램을 실행하기 등의 포트 번호

    로 매개 변수를 사용하는

    Java로 클래스를 실행하기 만하면됩니다. 여기 잡았다는 클래스 패스를 올바르게 설정하고 있습니다. 이를 위해 필자는 maven 의존성을 사용한다 : build-classpath goal. 이렇게하면 java 실행 명령에 사용할 수있는 전체 클래스 경로가 출력됩니다. 이것의 단점은 당신이 이것을 실행하고있는 머신에 maven과 maven repo를 설정해야한다는 것입니다. 제 경우에는 이것이 받아 들일 수 있으며이 접근법은 잘 작동합니다.

    또는 종속성이있는 실행 가능 jar를 만들 수 있습니다. 이를 위해 maven shade plugin을 추천합니다. http://maven.apache.org/plugins/maven-shade-plugin/examples/executable-jar.html을 참조하십시오.이 접근 방식의 단점은 하나의 거대한 파일로 끝나기 때문에 클래스 경로 오류와 종속성 문제를 해결하기 어렵다는 것입니다. 또한 라이브러리가 Meta-Inf 파일에 종속되어 있으면 가끔 서로 덮어 쓸 수 있습니다. Maven shade plugin은이 문제를 해결하는 방법을 제공하지만 여전히 문제를 진단하기가 어려울 수 있습니다.

    두 방법 모두 현재 폴더 구조와 web.xml 등을 유지할 수 있어야하지만 문제가있을 경우 알려 주시면 답변을 확대 할 수 있습니다.

    관련 문제