ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 잘못된 소스 파일 인코딩으로 인한 메이븐 컴파일 오류
    기타기술 2011. 7. 6. 19:50
    메이븐 사용시 간혹 소스 파일에 대한 인코딩이 POM(Project Object Model)파일에 정의된 것과 다르게 저장될 경우 컴파일오류가 발생할 수 있다. 그런데 컴파일 에러 내용이 좀 생뚱 맞아 원인을 찾지 못하고 버벅 거릴 수 있어 팁을 남겨 본다. 

    예를 들어 POM.xml 파일에 자바 소스 파일과 거타 리소스 파일에 대한 인코딩이 다음과 같이 각각 euc-kr 과 UTF-8로 설정되어 있다고 가정하자.

     <build>

    ...어쩌구 저쩌구..
    <plugins>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.4.1</version>
    <configuration>
    <encoding>UTF-8</encoding>
    </configuration>
    </plugin>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
    <source>1.5</source>
    <target>1.5</target>
    <encoding>euc-kr</encoding>
    </configuration>
    </plugin>
    ...어절씨구 저절씨구..
    </plugins>
    </build>


    위와 같은 경우 소스파일이 euc-kr로 인코딩이 되어 있어야 컴파일이 제대로 된다. 그런데 UTF-8나 다른 인코딩 방식으로 소스파일이 저장되어 있을 경우 다음과 같은 컴파일 오류가 발생할 수 있다.

    [INFO] ------------------------------------------------------------------------
    [ERROR] BUILD FAILURE
    [INFO] ------------------------------------------------------------------------
    [INFO] Compilation failure
    Failure executing javac, but could not parse the error:
    An exception has occurred in the compiler (1.6.0_14). Please file a bug at the J
    ava Developer Connection (http://java.sun.com/webapps/bugreport)  after checking
     the Bug Parade for duplicates. Include your program and the following diagnosti
    c in your report.  Thank you.
    java.nio.BufferOverflowException
            at java.nio.Buffer.nextPutIndex(Buffer.java:495)
            at java.nio.HeapCharBuffer.put(HeapCharBuffer.java:145)
            at com.sun.tools.javac.util.DefaultFileManager.decode(DefaultFileManager
    .java:830)
            at com.sun.tools.javac.util.DefaultFileManager.access$300(DefaultFileMan
    ager.java:76)
            at com.sun.tools.javac.util.DefaultFileManager$RegularFileObject.getChar
    Content(DefaultFileManager.java:1353)
            at com.sun.tools.javac.util.DefaultFileManager$RegularFileObject.getChar
    Content(DefaultFileManager.java:1252)
            at com.sun.tools.javac.main.JavaCompiler.readSource(JavaCompiler.java:48
    3)
            at com.sun.tools.javac.main.JavaCompiler.parse(JavaCompiler.java:550)
            at com.sun.tools.javac.main.JavaCompiler.parseFiles(JavaCompiler.java:80
    1)
            at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:727)
            at com.sun.tools.javac.main.Main.compile(Main.java:353)
            at com.sun.tools.javac.main.Main.compile(Main.java:279)
            at com.sun.tools.javac.main.Main.compile(Main.java:270)
            at com.sun.tools.javac.Main.compile(Main.java:87)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
    java:39)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
    sorImpl.java:25)
            at java.lang.reflect.Method.invoke(Method.java:597)
            at org.codehaus.plexus.compiler.javac.JavacCompiler.compileInProcess(Jav
    acCompiler.java:554)
            at org.codehaus.plexus.compiler.javac.JavacCompiler.compile(JavacCompile
    r.java:161)
            at org.apache.maven.plugin.AbstractCompilerMojo.execute(AbstractCompiler
    Mojo.java:605)
            at org.apache.maven.plugin.CompilerMojo.execute(CompilerMojo.java:128)
            at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPlugi
    nManager.java:490)
            at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(Defa
    ultLifecycleExecutor.java:694)
            at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLi
    fecycle(DefaultLifecycleExecutor.java:556)
            at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(Defau
    ltLifecycleExecutor.java:535)
            at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHan
    dleFailures(DefaultLifecycleExecutor.java:387)
            at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegmen
    ts(DefaultLifecycleExecutor.java:348)
            at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLi
    fecycleExecutor.java:180)
            at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
            at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
            at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
            at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:6
    0)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
    java:39)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
    sorImpl.java:25)
            at java.lang.reflect.Method.invoke(Method.java:597)
            at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
            at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
            at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)

            at org.codehaus.classworlds.Launcher.main(Launcher.java:375)


    [INFO] ------------------------------------------------------------------------
    [INFO] For more information, run Maven with the -e switch
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 11 seconds
    [INFO] Finished at: Wed Jul 06 19:03:52 KST 2011
    [INFO] Final Memory: 21M/254M
    [INFO] ------------------------------------------------------------------------


    이럴 경우, 당황하지 말고 최근에 변경한 소스파일에 인코딩 형식이 잘못되어 있지는 않은지 차근차근 확인하면 문제를 해결할 수 있겠다. 리소스 파일의 경우 인코딩 형식이 틀려도 컴파일 오류는 발생하지 않는다.




     
Designed by Tistory.