2012-04-25 2 views
1

Spring 애플리케이션에 대해 maven을 사용하여 단위 테스트를 수행 한 후 빌드를 완료하는 데 문제가 있습니다. mvn 설치가 완료되지 않았으며 모든 유닛 테스트를 실행 한 후 중단 된 것처럼 보였습니다. mvn install 내가 실행하면 cmd를 라인에서 나는 테스트가 완료 얻을 수 있지만, 빌드는 그것의 끝에 그게 전부Spring JUnit 테스트를 실행 한 후 Maven이 멈 춥니 다.

Results : 

Tests run: 34, Failures: 0, Errors: 0, Skipped: 0 

14:20:15,588 [Thread-3] INFO GenericApplicationContext - Closing [email protected]a3b24: startup date [Wed Apr 25 14:20:08 EDT 2012]; root of context hierarchy 
14:20:15,589 [Thread-3] INFO DefaultListableBeanFactory - Destroying singletons in org.s[email protected]16c163f: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,sysModel,alarmList,resourcePool,sysParams,stationHelper,commandTracker,org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor#0]; root of factory hierarchy 
14:20:15,595 [Thread-7] INFO GenericApplicationContext - Closing [email protected]577c: startup date [Wed Apr 25 14:20:10 EDT 2012]; root of context hierarchy 
14:20:15,596 [Thread-7] INFO DefaultListableBeanFactory - Destroying singletons in org.s[email protected]10952e8: defining beans [alarmDao,purgeDao,xactionDao,dataSource,sysModel,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor#0]; root of factory hierarchy 

달려 있습니다. 실행중인 두 개의 스레드, 내가 수행 한 작업이 확실하지 않습니다. 어쨌든 문제를 해결하기 위해 모든 테스트를 제거하고 완전히 빌드 할 프로그램을 얻었습니다. mvn install -DskipTests을 실행하면 완료됩니다. 마지막으로 필자는 본질적으로 system.out.println ("hello world") 인 하나의 JUnit 테스트를 추가했습니다. 테스트를 실행하고 설치를 완료하려면 JUnit 주석 "@RunWith (SpringJUnit4ClassRunner.class)"을 주석 처리하여 설치를 완료하십시오. 나는 Spring 3.1.0을 사용하고있다.

이 빌드 문제는 Windows7의 개발 컴퓨터에서 발생하지만 Linux 기반 (Ubuntu 11.10)에서 발생합니다. Hudson CI 서버는 동일한 SVN 저장소를 사용하여 시간별 빌드의 동일한 프로젝트에서 Maven 설치를 성공적으로 실행합니다.

답변

1

아마도 스프링 빈 중 하나가 스레드를 생성하고있을 것입니다. jconsole을 사용하여 걸려있는 프로세스에 연결하고 걸려있는 것을 확인합니다. 문제가있는 bean에 대해 @PreDestroy를 사용하여 종료시 스레드를 취소하여 문제를 해결할 수 있습니다.

+1

그래, 수동으로 스레드를 만들거나 @Asynchronous 또는 Spring의 타이머/실행 코드를 사용하고 있는지 확인하십시오. – sdouglass

0

스프링 애플 리케이션 컨텍스트 종료 중에 스레드 사이에 약간의 경합이있는 것으로 보입니다. 당신은 Spring 프레임 워크를위한 로깅을 시도하여 레벨을 디버깅하여 경합이 어디인지를 확인하고 가능한 경우 제거하십시오.

앱 컨텍스트에서 문제가없는 것으로 보이는 경우 플러그인 구성을 조정할 수 있습니다. surefire 플러그인은 테스트를 실행하는 데 사용되며 여러 스레드에서 테스트를 실행할 수있는 옵션이 있습니다. -X으로 mvn을 실행하여 스레드 옵션 (parallel, threadCount, perCoreThreadCount 등)에 어떤 값이 사용되는지 확인하십시오. 확실한 플러그인 구성 (실행 ID는 default-test)을 조정하여 하나의 스레드 만 실행하고 있는지 확인하고 Windows 7 상자에서 install이 작동하는지 확인하십시오.

Windows에서 작업하면 : 현재의 확실한 구성 (슈퍼 POM에서 제공하는 기본값 일 수 있음)이 CI 환경에서 잘 작동합니다. 그래서 나는 profile, activated if running on the Windows 7 environment을 생성하고, 확인 된 확실한 플러그인 구성을 프로파일로 옮깁니다.

관련 문제