복붙노트

[SPRING] 메이븐 (maven)과 부두 (jetty)를 사용하여 실행 가능한 항아리 만들기

SPRING

메이븐 (maven)과 부두 (jetty)를 사용하여 실행 가능한 항아리 만들기

부두를 사용하여 응용 프로그램을 시작하고 싶습니다. 그래서 아래에 언급 된 종속성을 추가했습니다. 그리고 main 메소드를 돌리면 부두가 성공적으로 시작됩니다. (struts2 + spring3 + hibernate maven 프로젝트를 수행 중이며, 그것을 tomcat에도 배치 할 수 있습니다)

이제 전쟁 패키징 용기에서 실행 가능한 병을 만들고 싶습니다. 그래서 필자는 paven에 maven-assembly-plugin을 추가했다. (나는 메이븐 항아리 플러그인으로 시도했지만 종속성을 추가하지는 않았다)

플러그인

<build>
    <plugins>
        <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.3</version>
        <configuration>
                 <archive>
            <manifest>
        <mainClass>com.dca.engine.StartDCA</mainClass>
            </manifest>
             </archive>
        <packagingExcludes>WEB-INF/lib/jetty*.jar,WEB-INF/lib/org.apache.taglibs.standard.glassfish*.jar,WEB-INF/lib/org.apache.jasper.glassfish*.jar,WEB-INF/lib/org.eclipse.jdt.core*.jar,WEB-INF/lib/javax.servlet.jsp*.jar,WEB-INF/lib/javax.el*.jar</packagingExcludes>
        <escapeString>\</escapeString>
        </configuration>
       </plugin>
       <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.4</version>
        <configuration>
                 <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                 </descriptorRefs>
             <archive>
            <manifest>
        <mainClass>com.dca.engine.StartDCA</mainClass>
            </manifest>
             </archive>
        </configuration>
        <executions>
             <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                      <goal>single</goal>
                    </goals>
             </execution>
        </executions>
    </plugin>
 </plugins>
<resources>
    <resource>
        <directory>src/main/java</directory>
        <includes>
        <include>**/*.java</include>
        <include>**/*.xml</include>
        </includes>
    </resource>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
    </resource>
</resources>
</build>

내장 된 부두

<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-server</artifactId>
    <version>8.1.10.v20130312</version>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-webapp</artifactId>
    <version>8.1.10.v20130312</version>
    <!-- <scope>provided</scope> -->
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-jsp</artifactId>
    <version>8.1.10.v20130312</version>
    <!-- <scope>provided</scope>  -->
</dependency> 

주된 방법

 Server server = new Server(8080);
        System.setProperty("is_DCA", "YES");
        WebAppContext webAppContext = new WebAppContext();
        webAppContext.setResourceBase("/home/myfolder/workspace/app/dca/src/main/webapp");
        webAppContext.setDescriptor("/home/myfolder/workspace/app/dca/src/main/webapp/WEB-INF/web.xml");
        webAppContext.setContextPath("/app");
        server.setHandler(webAppContext);
        server.start();
        server.join();

내가 만든 jar를 java -jar /home/myfolder/workspace/app/dca/target/app-dca-1.0-jar-with-dependencies.jar와 함께 실행합니다.

부두는 예외적으로 시작됩니다.

INFO  10-12 15:03:01,609 - jetty-8.y.z-SNAPSHOT
INFO  10-12 15:03:01,776 - Initializing Spring root WebApplicationContext
INFO  10-12 15:03:01,776 - Root WebApplicationContext: initialization started
INFO  10-12 15:03:01,843 - Refreshing Root WebApplicationContext: startup date [Tue Dec 10 15:03:01 IST 2013]; root of context hierarchy
INFO  10-12 15:03:01,885 - Loading XML bean definitions from class path resource [applicationContext-dca.xml]
ERROR 10-12 15:03:05,725 - Context initialization failed
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/util]
Offending resource: class path resource [applicationContext-dca.xml]

    at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
    at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
    at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.error(BeanDefinitionParserDelegate.java:316)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1420)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1413)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:184)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:140)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:111)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)

제가 만든 전쟁을 사용하여 부두를 시작할 수있는 가능한 방법이 있습니까? 그것은 / WEB-INF / lib / 폴더에 jar 파일이 있고, 모든 속성 파일과 xml 파일은 / WEB-INF / lib /에 있습니다.

하지만 메인 클래스를 찾을 수 없었습니다.

실행 가능한 war check sumit의 대답을 만들 때 일했습니다.

나는이 질문에서 예외를 얻고 있었다. 부두 버전을 7.6.7.v20120910으로 바꿨을 때

나는 그것이 부두와 함께 일하지 않은 이유를 모른다. 8.1.10.v20130312

해결법

  1. ==============================

    1.http://uguptablog.blogspot.com/2012/09/embedded-jetty-executable-war-with.html을 확인하십시오.

    http://uguptablog.blogspot.com/2012/09/embedded-jetty-executable-war-with.html을 확인하십시오.

    관련 코드는

        ProtectionDomain domain = Main.class.getProtectionDomain();
        URL location = domain.getCodeSource().getLocation();
        WebAppContext webapp = new WebAppContext();
        webapp.setContextPath("/");
        webapp.setWar(location.toExternalForm());
        server.setHandler(webapp);
    

    도움이되는 희망.

  2. ==============================

    2.WAR 파일의 내용을 해킹하는 대신 허용 된 대답이 수행하는 것처럼 maven-shade-plugin을 사용하여 실행 가능한 JAR 파일을 만들 수 있습니다. 여기에는 다음과 같은 장점이 있습니다.

    WAR 파일의 내용을 해킹하는 대신 허용 된 대답이 수행하는 것처럼 maven-shade-plugin을 사용하여 실행 가능한 JAR 파일을 만들 수 있습니다. 여기에는 다음과 같은 장점이 있습니다.

  3. ==============================

    3.Jetty를 사용하지 않고 Tomcat을 대신 사용할 수 있다면 다음과 같이하면됩니다.

    Jetty를 사용하지 않고 Tomcat을 대신 사용할 수 있다면 다음과 같이하면됩니다.

    <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.0</version>
        <executions>
            <execution>
                <id>tomcat-run</id>
                <goals>
                    <goal>exec-war-only</goal>
                </goals>
                <phase>package</phase>
                <configuration>
                    <path>/standalone</path>
                    <enableNaming>false</enableNaming>
                    <finalName>standalone.jar</finalName>
                    <charset>utf-8</charset>
                </configuration>
            </execution>
        </executions>
    </plugin>
    

    이렇게하면 "standalone.jar"이라는 uberjar가 만들어지며 호출하면 간단히 실행할 수 있습니다.

    java -jar standalone.jar
    

    그러면 http : // localhost : 8080 / standalone에서 응용 프로그램이 시작됩니다.

    대체 포트를 쉽게 선택할 수 있습니다.

    java -jar standalone.jar -httpPort=7070
    

    Tomasz Nurkiewicz의 블로그 항목 (http://www.nurkiewicz.com/2012/11/standalone-web-application-with.html)에 감사드립니다.

  4. ==============================

    4.내가 아는 가장 간단한 방법은 Jenkins CI와 같은 winstone-maven-plugin (더 좋은 예 : D)입니다. 그것은 부두 (심지어 나는이 도구를 좋아한다 : D)를 사용하지 않고, Winstone.

    내가 아는 가장 간단한 방법은 Jenkins CI와 같은 winstone-maven-plugin (더 좋은 예 : D)입니다. 그것은 부두 (심지어 나는이 도구를 좋아한다 : D)를 사용하지 않고, Winstone.

    <plugin>
        <groupId>net.sf.alchim</groupId>
        <artifactId>winstone-maven-plugin</artifactId>
        <executions>
            <execution>
                <goals>
                    <goal>embed</goal>
                </goals>
                <phase>package</phase>
            </execution>
        </executions>
    </plugin>
    

    아주 쉽지, 안 그래? :) 실행 파일 - 독립 실행 형 - jar : app-dca-1.0-standalone.jar을 생성합니다.

  5. from https://stackoverflow.com/questions/20491407/create-a-executable-jar-using-maven-and-jetty by cc-by-sa and MIT license