m2 eclipse plugin이 1.0 버전 업하면서 생긴 단순한 설정은 아래와 같이 처리한다.
http://knight76.tistory.com/entry/이클립스-STS-maven-builder-변경


컴파일을 잘 되는데, pom.xml 파일에 maven parent를 사용하는 부분에서 에러가 있다고 나온다. build life cycle에서 무엇인가 이슈가 있다.

 

원인을 찾아보니, 이클립스 싸이트의 m2e 플러그인에 대한 내용이 있다. 간단히 요약해보면 다음과 같다. 빌드시 명시적으로 문제의 소지가 있는 플러그인에 대해서 에러로 처리할테니, 무시하든지 추가하든지 하는 설정을 넣으라는 얘기이다. (m2eclipse 플러그인 개발자도 maven 때문에 고생한다…. )

http://wiki.eclipse.org/M2E_plugin_execution_not_covered

https://issues.sonatype.org/browse/MNGECLIPSE-823에 내용에 있는 것처럼 리소스들과 컴파일이 안되는 문제가 발생되기도 했다. 0.12 버전 이하에서는 이클립스 빌드시 maven을 사용해서 컴파일을 했었다. 사실 이클립스 플러그인 개발입장에서는 그저 maven에 위임하는데, 어떤 “ Plug excution”이 동작하여 예상치 못하게 파일(리소스)가 날아가(missing) 버리거나 JVM, OS 리소스 부족으로 문제를 일으키는 경우가 있었다.

이 문제를 해결해가 위해서 1.0 부터는 빌드 lifecycle에 명확한 방법(explicit instructions)을 제공하였다. 이것을 “project build lifecycle mapping” (lifecycle mapping)이라고  한다. pom.xml 설정에 maven 빌드와 별도로플러그 실행(execution)에 대한 정보를 넣을 수 있게 하였다.

예를 들어 project build lifecycle mapping 정보가 없는 경우에 대해서는 다음과 같이 m2 이클립스 플러그인에서 에러로 처리한다고 한다.

Plugin execution not covered by lifecycle configuration:
org.apache.maven.plugins:maven-antrun-plugin:1.3:run
    (execution: generate-sources-input, phase: generate-sources)
이 문제를 해결하기 위해서 ignore 또는 execute goal을 넣어야 한다. 

 

아래 에러 로그에 있는 내용이 바로 위에 작성한 위키의 내용과 일치한다.

Multiple annotations found at this line:
    - Plugin execution not covered by lifecycle configuration: org.codehaus.mojo:xml-maven-plugin:1.0:transform
     (execution: default, phase: process-resources)
    - Plugin execution not covered by lifecycle configuration: org.apache.maven.plugins:maven-antrun-plugin:1.3:run
     (execution: process-resources, phase: process-resources)
    - maven-dependency-plugin (goals "copy-dependencies", "unpack") is not supported by m2e.
    - Plugin execution not covered by lifecycle configuration: org.apache.maven.plugins:maven-antrun-plugin:1.3:run
     (execution: copy-base-resource, phase: generate-sources)

 

이 방식을 이용해서 아래와 같이 pom.xml 파일에 정리하였더니 더 이상 이클립에서 에러라고 처리되지 않는다.

<build>
        <pluginManagement>
            <plugins>
                <!--This plugin's configuration is used to store Eclipse m2e settings
                    only. It has no influence on the Maven build itself. -->
                <plugin>
                    <groupId>org.eclipse.m2e</groupId>
                    <artifactId>lifecycle-mapping</artifactId>
                    <version>1.0.0</version>
                    <configuration>
                        <lifecycleMappingMetadata>
                            <pluginExecutions>
                                <pluginExecution>
                                    <pluginExecutionFilter>
                                        <groupId>
                                            org.apache.maven.plugins
                                        </groupId>
                                        <artifactId>
                                            maven-antrun-plugin
                                        </artifactId>
                                        <versionRange>
                                            [1.3,)
                                        </versionRange>
                                        <goals>
                                            <goal>run</goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <ignore></ignore>
                                    </action>
                                </pluginExecution>
                                <pluginExecution>
                                    <pluginExecutionFilter>
                                        <groupId>
                                            org.codehaus.mojo
                                        </groupId>
                                        <artifactId>
                                            xml-maven-plugin
                                        </artifactId>
                                        <versionRange>
                                            [1.0,)
                                        </versionRange>
                                        <goals>
                                            <goal>transform</goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <ignore></ignore>
                                    </action>
                                </pluginExecution>
                                <pluginExecution>
                                    <pluginExecutionFilter>
                                        <groupId>org.apache.maven.plugins</groupId>
                                        <artifactId>maven-dependency-plugin</artifactId>
                                        <versionRange>[1.0.0,)</versionRange>
                                        <goals>
                                            <goal>copy-dependencies</goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <ignore />
                                    </action>
                                </pluginExecution>
                            </pluginExecutions>
                        </lifecycleMappingMetadata>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

Posted by 김용환 '김용환'

 

최신 이클립스/ STS 에 포함되었던 maven plugin m2 eclipse가 버전업을 하면서 패키지가 변경되었다. (0.1 –> 1.0) maven 빌드는 되는데, 이클립스 에서의 소스상으로는 에러가 나오는 것처럼 볼 수 있다.

 

해결을 하려면, 다음과 같이 수정하면 컴파일이 된다.


<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>xxx-parent</name>
    <comment></comment>
    <projects>
    </projects>
    <buildSpec>
        <buildCommand>
            <name>org.eclipse.jdt.core.javabuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
           <name>org.maven.ide.eclipse.maven2Builder</name>
            <name>org.eclipse.m2e.core.maven2Builder</name>
            <arguments>
            </arguments>
        </buildCommand>
    </buildSpec>
    <natures>
        <nature>org.maven.ide.eclipse.maven2Nature</nature>
        <nature>org.eclipse.jdt.core.javanature</nature>
       <nature>org.eclipse.m2e.core.maven2Nature</nature>
        
    </natures>
</projectDescription>

 

 

* 참고 사항

구버전 (2.5.2.RELEASE)

 

신버전 (2.8.1.RELEASE)






그 외 .classpath  파일에 수정사항이 있다.

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"/>
</classpath>

이렇게 두개를 바꿔야 한다.

Posted by 김용환 '김용환'

외부 싸이트에서 git 계통 소스를 다운받으려고 하는데, cvs나 svn만 사용하신 분들은 난감합니다.
원리에 대한 내용을 보면 바로 감이 잘 안오는 경우가 있습니다. 이럴 때는 샘플을 따라하면 점차 이해할 수 있는 폭이 커집니다.

이클립스(Spring 의 git 기능(egit)을 활용해 local pc로 다운받는 방법을 소개합니다.
다른 것도 있긴 하지만, 자주 사용하는 기능이라서, 잘 정리두면 좋을 것 같습니다.


제가 사용하고 있는 버전은 Spring Tool Suite 2.7.2 Release 버전이며, 최신 Eclipse에 Spring 기능이 포함된 버전입니다.  (spring 관련 플러그인, maven  플러그인이 자동으로 깔려 있어서 사용중입니다.)

STS 2.7.2는 egit 버전은 1.1.0을 사용하고 있습니다.




제일 먼저 다운 받고 싶은 소스가 있어야 합니다. 

spring source의 spring social 샘플을 예로 들겠습니다 .
https://github.com/SpringSource/spring-social-samples
(github는 cvs나, svn repository과 같은 git 소스를 관리해주는 open repository입니다. )



git read-only의 주소를 복사하거나, 주소옆에 있는 아이콘을 마우스로 눌러누르면 됩니다. 
그러면, 자동으로 clipboard에 복사됩니다.


STS 에서 Import 를 선택하고, Projects from Git를 선택합니다.




Next 버튼을 선택하면 다음과 같은 창이 뜨면서, Git Repository를 선택하라고 합니다.




여기서 Clone 버튼을 선택합니다.
clipboard에 복사했던 주소가 자동으로 나타나는 것을 볼 수 있습니다.

 




public한 read-only 주소로 접근하는 것이라 특별히 인증 절차는 필요없습니다. Next 버튼을 선택합니다.



master, sppopup 모두 check on 하고 Next 버튼을 선택합니다. (svn으로 따지면 head와 branch 정도의 이름입니다.)

 



저장받을 주소로 디폴트로 자동으로 나타나고, master를 initial branch로 나타나는 것을 알수 있습니다.
Next 버튼을 선택합니다.



Finish 버튼을 선택합니다.

그러면, import 창을 다시 볼 수 있습니다.





spring social sample을 확인할 수 있습니다. Next 버튼을 선택합니다.

import할 프로젝트로 선택합니다.




Next버튼을 선택하고, 다음 창에서 Finish 버튼을 선택하면 완료됩니다.

 



프로젝트 익스플러어를 보면, 샘플예제를 모두 받아볼 수 있습니다.




이제 조금 감이 잡히실 것입니다.


그런데, 저 모든 것을 다 쓰지 않을 텐데. 다 받았다는 느낌이 있을 것입니다.


아까 import 화면으로 돌아가보겠습니다.

working directory 앞에 보면, tree구조로 볼 수 있는 작은 아이콘이 있습니다. 그 것을 선택하면, 하위 프로젝트를 선택할 수 있는 tree가 보입니다. 내가 보고 싶은 것만 보고 싶다면, 하위 프로젝트를 선택하고 진행하면 됩니다.





예를 들어 spring-social-quickstart라는 것을 선택한다면, 아래와 같이 창이 보일 것입니다. spring-social-quickstart라는 디렉토리가 보이죠?




Project explorer에 다운받은 git 소스가 있습니다.


maven build를 하니 깔끔하게 build successful이 뜹니다.

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 46 seconds
[INFO] Finished at: Wed Oct 12 10:36:44 KST 2011
[INFO] Final Memory: 15M/37M
[INFO] ------------------------------------------------------------------------



그 다음에는 Perspective 창에서 Git Repository 창을 열어보겠습니다.




spring-social-showcase를 선택하고 import 해보겠습니다.




아까 보던 import 창을 볼 수 있습니다. 그대로 진행하시면 소스를 다운받아 볼 수 있습니다.


 



만약  git 서버에서 누군가가 소스를 수정했고, 그 소스를 다운 받고 싶다면, Team-> Synchronize Workspace를 선택하면 됩니다.



Team Synch perspective 창이 뜨면서 svn이나 cvs 를 사용하면서 사용했던 방식을 그대로 사용하면 됩니다.


project를 import 하고, 그 project를 이클립스의 project exploreer에서 지웠다가 다시 import하면 .project 파일이 있다고 하면서 import가 안됩니다.

그 때는 파일 탐색기에 들어가서 git repository 위치에 있는 .project 파일을 지우고, 다시 import를 진행하면, 에러가 발생하지 않습니다.







간단하게 소스를 다운받고 업데이트하는 간단한 방법을 말씀드렸습니다.

자주 쓰는 다른 기능도 설명하도록 하겠습니다.


Posted by 김용환 '김용환'
TAG Eclipse, egit, Git, STS