프로그래밍2016. 4. 6. 18:12

요즘 아톰(Atom) 에디터에 푹 빠져 모든 언어(및 마크다운, 아스키독 등 문서)를 이 에디터에서 돌려보고 있다. 자세한 건 나중에 다시 쓰고...


클로저 파일을 프로젝트 만들지 않고 파일 단위로 아톰에서 실행하기 위해 라이닝겐 배치 파일을 수정한 건 이미 깃허브에 올렸고, 오늘은 스칼라 파일이 여러 개 있을 때 실행하는 방법이다. 덧붙여 스칼라테스트(ScalaTest)도 지원하게 했다. 이건 딱히 깃허브에 올릴 수가 없어(전에 올린 것도 사실 PR 보내기도 좀 거시기한 수정이었다만) 일단 여기에 올린다.


수정 방법. scala.bat를 보면 .scala 파일을 실행하는 부분은 다음과 같다.


"%_JAVACMD%" %_JAVA_OPTS% %_PROPS% -cp "%_TOOL_CLASSPATH%" scala.tools.nsc.MainGenericRunner  %*


여길 이렇게 고친다.


set _SCALA_FILE=%~n1

set _SCALA_FILE_PATH=%~dp1


"%_JAVACMD%" %_JAVA_OPTS% %_PROPS% -cp "%_TOOL_CLASSPATH%" scala.tools.nsc.Main  %*

cd %_SCALA_FILE_PATH%

"%_JAVACMD%" %_JAVA_OPTS% %_PROPS% -cp "%_TOOL_CLASSPATH%" scala.tools.nsc.MainGenericRunner  %_SCALA_FILE%

if %ERRORLEVEL%==0 goto end

"%_JAVACMD%" %_JAVA_OPTS% %_PROPS% -cp "%_TOOL_CLASSPATH%" org.scalatest.run %~n1

goto end


설명-_-하자면... .scala 파일을 단순히 실행하는 게 아니라, .class 파일로 컴파일한 다음에 실행한다. 실행 결과 오류가 나지 않았다면 종료하고, 오류가 났다면 해당 클래스를 스칼라테스트로 다시 실행한다.


findstr /c:"import org.scalatest." "%1" > nul
if %ERRORLEVEL% == 0 goto RUN_TEST
"%_JAVACMD%" %_JAVA_OPTS% %_PROPS% -cp "%_TOOL_CLASSPATH%" scala.tools.nsc.MainGenericRunner  %*
goto end

:RUN_TEST
"%_JAVACMD%" %_JAVA_OPTS% %_PROPS% -cp "%_TOOL_CLASSPATH%" org.scalatest.run %~n1
goto end

테스트가 들어 있는 파일도 그냥 오류가 나지 않을 수 있어, 그냥 대상 파일 안에 org.scalatest를 임포트하는 텍스트가 있으면 테스트로, 아니면 그냥 실행하도록 바꿨다.


스칼라테스트(scalatest ... .jar) 파일은 스칼라의 라이브러리 폴더에 이미 있다고 가정하고 따로 클래스패스를 지정하지는 않았다.


그냥 무식한 방법. 컴파일 시 생성된 .class 파일은 지우지 않고 뒀다. 클로저와는 달리, 여러 파일 실행 시 클래스 파일이 있어야 한다.


물론 스칼라 IDE에서 스칼라테스트 플러그인을 받아서 함께 사용하는 게 더 깔끔하다. 근데 그러려면 프로젝트를 만들고 어쩌고 해야 하니까 그게 귀찮을 뿐.


Posted by 필유