play1.3-jdk8-spring4.1.6 테스트 한 내용이다.

결론은 '그대로는 안되고, 동작되게 한다 해도 그걸 위해 해야 하는 오버헤드가 있다는 점 '


spring 3에서는 classpath 를 엄격히 따지지 않았는데, spring 4 부터는 해당 클래스가 classpath에 있는지 엄격히 본다.


spring 3에서는 문제가 없었는데, spring 4는 precompile된 클래스들을 scanning하고 잘 하고, spring container 초기화할 때, classpath에 있는지 체크한다. 따라서 아래와 같은 에러가 발생할 수 있다.

'

org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [com.google.map.Location]; nested exception is java.io.FileNotFoundException: class path resource [com.google.map.Location] cannot be opened because it does not exist

'


다양한 테스트 끝에 precompile된 클래스를 jar로 묶어 lib/ 디렉토리안에 복사하니, 잘 동작한다.


참고로 play classpath는 아래와 고정되어 있고, 사용자 정의 classpath를 추가하거나(play 소스를 고쳐야 한다), play의 spring 사용 부분은 webapp의 spring 관련 패키지를 모두 jar로 바꾸면 된다. 

'

The conf/ directory for the application

The $PLAY_PATH/framework/play-$version.jar

All JAR files found in your application’s lib/ directory

All JAR files found in the $PLAY_PATH/framework/lib/ directory

참조 : https://www.playframework.com/documentation/1.2.2/ide#Classpathsettings

'


구질구질해서 java7 + spring 3 + play 1.3 쓰는 게 나을 것 같다. 


참고로 play2 spring 연동 모듈을 살펴보면, scanning하는 코드가 없는 이유가 있다. 

https://github.com/ydeshayes/play-2.3.x-spring-module/blob/master/app/play/api/modules/spring/SpringPlugin.scala

그냥 컴파일하고 쓰기 때문에 복잡하지 않다.play1은 precompile이라는 특이한 기능때문에 classpath 연동 이슈가 생길 수 있다. 


Posted by '김용환'
,