본문 바로가기

개발환경/이클립스

Dynamic Web Module이 아닌 일반 자바 프로젝트에서 발생하는 워닝 제거하기

문제
이클립스에서 메이븐2 + WST 를 사용하고 있을 때 웹 모듈이 참조하는 일반 자바 프로젝트에서 다음과 같은 경고(Warnning)가 발생할 경우 어떻게 경고를 제거할 것인가?

Classpath entry org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER will not be exported or published. Runtime ClassNotFoundExceptions may result.

해결방법
문제를 해결하고자 열심히 구글링을 했지만 해결방법으로 제시한 것들은 모두 WST의 Dynamic Web Module에서 발생한 경우이고 문제로 제기한 것과 같이 웹 모듈이 참조하는 일반 자바 프로젝트에서 발생한 경우는 딱히 해결 방법을 찾을 수가 없었다. 그래서 일반 자바프로젝트를 WTP 프로젝트로 변경해서 해결 했다.

1. 먼저 .project 파일에서 다음과 같이 변경한다.
...
  <buildspec>
    <buildcommand>
      <name>org.eclipse.jdt.core.javabuilder</name>
      <arguments>
      </arguments>
    </buildcommand>
    <buildcommand>
      <name>org.maven.ide.eclipse.maven2Builder</name>
      <arguments>
      </arguments>
    </buildcommand>
    <buildcommand>
      <name>org.eclipse.wst.common.project.facet.core.builder</name>
      <arguments>
      </arguments>
    </buildcommand>

  </buildspec>
  <natures>
    <nature>org.eclipse.jdt.core.javanature</nature>
    <nature>org.maven.ide.eclipse.maven2Nature</nature>
    <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
  </natures>
  ...
이전 프로젝트에서 위와 같이 빨강색으로된 빌더를 추가하면 WTP 프로젝트가 된다.

2. .classpath 파일을 아래와 같이 변경한다.
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
  <classpathentry kind="src" path="src/main/java"/>
  <classpathentry kind="src" path="src/main/resources"/>
  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
  <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER">
    <attributes>
      <attribute name="org.eclipse.jst.component.nondependency" value=""/>
    </attributes>
  </classpathentry>

  <classpathentry kind="output" path="target/classes"/>
</classpath>
빨강색으로 표시된 부분이 핵심인데 Quick Fix(Ctrl + 1)로 문제를 해결하면 경고는 사라지지 않으면서 위와 비슷한 속성을 추가해 준다. 아래는 Quick Fix로 추가된 모습인데 위와 비교해 보면 차이점을 쉽게 알 수 있다.

    <attributes>
      <attribute name="org.eclipse.jst.component.dependency" value="../"/>
    </attributes>

3. 마지막으로 .settings에 다음과 같은 파일을 추가해 준다.
org.eclipse.jdt.ui.prefs
org.eclipse.wst.common.component
org.eclipse.wst.common.project.facet.core.xml

각각의 파일 내용은 다음과 같다.

#org.eclipse.jdt.ui.prefs
#Thu Apr 23 17:57:27 KST 2009
eclipse.preferences.version=1
internal.default.compliance=default

#org.eclipse.wst.common.component
<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId" project-version="1.5.0">
    <wb-module deploy-name="UCommonWebUtility">
        <wb-resource deploy-path="/" source-path="/src/main/java"/>
        <wb-resource deploy-path="/" source-path="/src/main/resources"/>
    </wb-module>
</project-modules>

#org.eclipse.wst.common.project.facet.core.xml
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
  <installed facet="jst.java" version="6.0"/>
  <installed facet="jst.utility" version="1.0"/>
</faceted-project>

위의 파일은 다음과 같이 프로젝트 속성(Alt + Enter)에서 Project Facets을 설정하므로써 자동 생성할 수 있다.

사용자 삽입 이미지
Modify Project 를 선택하여 아래와 같이 편집할 할 수 있다.
사용자 삽입 이미지

사실 이렇게 까지 해서 경고(Warnning)를 제거해야 할까 싶기도하다. 우선 WTP 프로젝트로 할 필요가 없는데도 WST 빌더를 붙여서 생성을 해야 하는데 프로젝트가 무거워 지는 경향이 있다. 그러나 정말 문제가 될만한 경고를 놓치지 않기 위해서는 프로젝트가 항상 깨끗한 상태로 놓여있어야 한다는 생각이다. 즉, 이클립스가 아이콘으로 보여주는 경고를 빠르게 식별하기 위함이다.

덧붙여서 위와 같이 프로젝트를 WTP로 변경하게 되면 불필요한 파일 및 폴더가 다수 생길 수 있다. 이때 사용하지 않는 것들은 과감하게 지워도 된다.
예) src/main/java/META-INF, .settings/org.eclipse.jdt.core.prefs 등

위와 같이 모두 설정한 다음에도 프로젝트에서 위의 경고가 사라지지 않는 다면 프로젝트를 명시적으로 재빌드 해주면 된다.