Maven Jetty Plugin 으로 개발하면서 css, js, html 같은 정적 파일이 저장안될때

이클립스에서 maven을 쓰면서 jetty plugin 으로 서버를 띄워놓고 개발을 할때

css, js, html 같은 정적 컨텐츠 파일을 편집해서 저장할려고 하면

"요청한 작업은, 사용자가 매핑한 구역이 열려 있는 상태인 파일에서 수행할 수 없습니다" 요런 야리꾸리한 에러 메시지가 뜨면서 저장이 안된다.



어디서 찾아봤는데 이런 현상은 윈도우에서만 발생하고 서버가 올라간 상태에서 해당파일을 jetty 가 참조하고 있어서 동시에 파일을 변경할수 없어서 나는 에러라고 한다. 

요것을 해결하기 위한 방법은

1. pom.xml 에서 jetty plugin 이 설정된 부분에 아래처럼 <defaultsDescriptor>위치</defaultsDescriptor> 를 추가해준다.
<plugin>
	<groupId>org.mortbay.jetty</groupId>
	<artifactId>jetty-maven-plugin</artifactId>
	<version>8.0.0.RC0</version>
	<configuration>
		<scanIntervalSeconds>1</scanIntervalSeconds>
		<webAppConfig>
			<defaultsDescriptor>src/main/resources/jetty/webdefault.xml</defaultsDescriptor>
		</webAppConfig>
	</configuration>
</plugin>

 jetty 8.0.0. 어쩌고 하는 버전부터인지 몰라도 아무튼 최신버전은 webdefault.xml 위치를 설정하는 방법이 바껴서 위와 같은 태그로 설정해야 한다.

Maven Jetty Configuration 참고 URL : http://wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugin





2. pom.xml에서 설정한 위치로 webdefault.xml 파일을 복사하고 webdefault.xml 파일에서 init-param 들 중에 useFileMappedBuffer 이라는 항목이 true 로 설정되 있을건데 요걸 false 로 바꿔주면 된다.
<init-param>
	<param-name>useFileMappedBuffer</param-name>
	<param-value>false</param-value>
</init-param>

webdefault.xml

 요렇게만 해주면 이제부터 파일이 훅훅 저장이 잘 된다.




※ 옛날 버전에서 webdefault.xml 위치 지정 : configuration 태그 아래에 바로 <webDefaultXml>위치</webDefaultXml> 요렇게 설정하면 된다.
<configuration>
	<webDefaultXml>src/main/resources/jetty/webdefault.xml</webDefaultXml>
</configuration>
옛날버전 Jetty Configuration 참고 URL : http://docs.codehaus.org/display/JETTY/Maven+Jetty+Plugin



※ 디폴트 webdefault.xml 위치
[메이븐로컬레파지토리]\org\eclipse\jetty\jetty-webapp\플러그인버전\jetty-webapp-XXX.jar 파일안에 org/eclipse/jetty/webapp/ 폴더 안에 있다~~
 
[메이븐로컬레파지토리] 경로는 별다른 설정을 안했다면 사용자 홈 디렉토리\.m2\repository 이다.

나같은 경우는 C:\Users\Administrator\.m2\repository 요기임.