2012-05-12 3 views
2

서로 종속 된 Eclipse에서 여러 Maven 프로젝트가 있습니다. 이들 중 일부는 Spring 라이브러리 (Spring 코어, Spring MVC 등)에 종속되어있다.종속성이있는 Maven 프로젝트를 Eclipse 내에서 실행중인 Tomcat 또는 Jboss에 배치

'mvn clean install'을 사용하여 프로젝트를 빌드하면 maven이 war 파일을 생성하고 ./target/ 폴더에 저장합니다. 그런 다음이 war 파일을 가져 와서 실행중인 응용 프로그램 서버에 배포 할 수 있습니다. 나는 Tomcat 7과 Jboss 7.1.0 모두에서 war 파일을 테스트했으며 정상적으로 작동합니다.

제가 이클립스에서 직접 프로젝트를 실행하려고해도 문제가 있습니다. 나는 서버 코드를 디버그 할 수 있고 이것이 가능하다는 것을 알 수있는 유일한 방법은 Eclipse 내에서 실행중인 응용 프로그램 서버에서 프로젝트를 실행하는 것입니다.

Eclipse에 Tomcat 응용 프로그램 서버를 구성했습니다. 내가 다음 Maven 프로젝트를 선택하고 우측 '서버에서 실행'을 그것을 클릭하고 선택하면 프로젝트가 실행 톰캣 인스턴스에 배포하지만 몇 가지 이유로 다음과 같은 오류 발생 :

12-May-2012 15:48:22 org.apache.catalina.core.StandardContext listenerStart 
SEVERE: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener 
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1701) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1546) 
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:525) 
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:507) 
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:124) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4715) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5273) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1568) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1558) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) 
    at java.lang.Thread.run(Thread.java:619) 
12-May-2012 15:48:22 org.apache.catalina.core.StandardContext listenerStart 
SEVERE: Skipped installing application listeners due to previous error(s) 

내가 같은 시도를, 즉 이클립스의 Jboss 인스턴스에서 프로젝트를 실행하면 여러 라이브러리를 찾을 수 없다는 불만이 제기된다. 불만을 토로하는 대부분의 라이브러리는 Maven POM 파일에서 종속성이라고 불리는 라이브러리입니다.

Tomcat 또는 Jboss (Jboss 도구 사용) 프로젝트를 배포 할 때 의존성이 배포되지 않아서 오류가 발생한다고 생각합니다. 이클립스에 모든 의존성을 배치하도록 지시하는 다른 설정이 필요합니까?

war 파일을 수동으로 배포하는 경우 작동한다는 점에 유의하십시오. 이클립스에서 '서버에서 실행'옵션을 사용하여 배포하면 작동하지 않습니다.

덕분에

답변

3

난 당신이 어딘가에 당신의 프로젝트의 WEB-INF 폴더가 있다고 가정합니다. 프로젝트에 의존하는 모든 jar 파일을 포함하는 lib라는 하위 폴더가 있습니까?

그렇지 않은 경우 복사해야합니다. 당신은이 같은 받는다는 종속성 플러그인이 작업을 수행 할 수 있습니다

WEB-INF 폴더는 상기와 동일하지 않습니다 당신의 위치, 그것을 변경해야하는 경우

<plugin> 
<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-dependency-plugin</artifactId> 
<version>2.4</version> 
<executions> 
    <execution> 
     <phase>process-resources</phase> 
     <goals> 
      <goal>copy-dependencies</goal> 
     </goals> 
    </execution> 
</executions> 
<configuration> 
    <outputDirectory>${project.basedir}/src/main/webapp/WEB-INF/lib</outputDirectory> 
</configuration> 
. 청소할 때이 디렉토리를 비우도록 클린 플러그인을 구성해야합니다. 그렇지 않으면 종속성을 제거하면 jar 파일은 여전히 ​​lib-folder에있게됩니다.

+0

내 응용 프로그램에 WEB-INF/lib 폴더가 있습니다. war 파일을 만들면 라이브러리가 복사됩니다. 내 생각에 일식에서 응용 프로그램을 직접 배포하면 복사되지 않습니다. – ziggy

+0

이 WEB-INF/li는 대상 또는 개발 구조에 있습니까? jar 파일이 두 위치 모두에 복사됩니까? 나는 그들이 /finalname_/WEB-INF/lib/target에 복사 될 뿐이며 "Run on server"명령을 실행할 때 eclipse가 그 폴더를 사용하지 않는다고 생각한다. –

+0

예 'mvn clean install'을 실행하면 Maven 저장소에서 target/myApp/WEB-INF/lib로 복사되지만 "Run on Server"명령을 사용하면 사용하지 않습니다. – ziggy

관련 문제