M2E 및 maven에서 소스 폴더를 Eclipse 소스 폴더로 생성


91

이클립스에 메이븐 프로젝트가 있고 주석 프로세서를 실행하여 코드를 생성하는 메이븐 목표가 있습니다. 이 코드의 출력 폴더는 target / generated-sources / apt입니다.

이클립스에서이 생성 된 코드를 보려면 이클립스 프로젝트에 target / generated-sources / apt를 소스 폴더로 추가해야합니다.

그러나 이로 인해 "Maven Configuration Problem"유형의 오류가 발생합니다.

프로젝트 구성이 pom.xml로 최신이 아닙니다. 프로젝트 구성 업데이트 실행

나는 eclipse가 maven의 세트와 다른 소스 폴더 세트를 가지고 있기 때문에 이것이 왜 그런지 이해한다고 생각합니다. 하지만 생성 된 소스 폴더를 볼 수 있으려면 이클립스가 필요하기 때문에이 다른 세트가 필요합니다.

순수 maven 빌드를 수행 할 때 이러한 소스 폴더는 maven에 의해 빌드에 포함됩니다.

btw, 나는 maven eclipse 플러그인 m2e 1.0의 공식 eclipse 릴리스로 업그레이드했습니다. 이전 m2eclipse 버전으로 돌아 가기 전에 m2e 플러그인을 사용하여 이에 대한 해결 방법 / 솔루션을 찾을 수 있는지 확인하고 싶습니다.

답변:


105

build-helper-plugin 을 사용하여 소스 디렉토리를 첨부해야합니다 .

이렇게 :

 <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>add-source</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>add-source</goal>
            </goals>
            <configuration>
                <sources>
                    <source>${project.build.directory}/generated-sources/java/</source>
                </sources>
            </configuration>
        </execution>
    </executions>
 </plugin>

또한 다음을 수행해야합니다.


4
이 솔루션은 m2e connector for build-helper-maven-pluginEclipse
에를

나를 위해 작동하지 않습니다. build-helper-plugin 설정에 대해 자세히 설명해 주시겠습니까?
Kevin Wong

<plugin> <groupId> org.codehaus.mojo </ groupId> <artifactId> build-helper-maven-plugin </ artifactId> <executions> <execution> <id> add-source </ id> <phase> generate- sources </ phase> <goals> <goal> add-source </ goal> </ goals> <configuration> <sources> <source> $ {project.build.directory} / generated-sources / java / </ source> <source> $ {project.build.directory} / jaxws / wsimport / java </ source> </ sources> </ configuration> </ execution> </ executions> </ plugin>
Kevin Wong

2
Kepler를 사용하면 빌드 도우미 maven 플러그인을 위해 m2e 커넥터도 설치해야했습니다. (이클립스의 maven pom 편집기에서 pom을 열고 상단의 빨간색 링크를 클릭하십시오).
Snicolas 2013-09-05

1
지금까지 내가 말할 수있는, 현재의 build-helper-maven-plugin<version>로 지정 3.2.0(글을 쓰는 시점에서 최신), 아파트 M2E 커넥터를 사용할 필요가 없습니다. 현재 Eclipse IDE 2020-06에서 Eclipse에 포함 된 Maven 3.6.3을 사용하고 있으며 소스 폴더의 디렉토리 경로를 추가하려고 시도한 후 제외 (**)가있는 소스 폴더 문제가 해결되었습니다. 이제 모든 포함 항목이 (** / *. java).
tom_mai78101

80

오류 메시지를 마우스 오른쪽 버튼으로 클릭합니다.

프로젝트 구성이 pom.xml로 최신 상태가 아닙니다. 프로젝트 구성 업데이트 실행

문제보기에서 빠른 수정 을 선택하고 마침 을 클릭 하여 기본 업데이트 프로젝트 구성 을 선택합니다 . 이것은 그것을 수정합니다.


1
이것은 나에게도 효과적입니다. 왜 이것이 허용되지 않는 대답입니까? 받아 들여지는 대답이 너무 많은 것 같습니다.
Niels Basjes

14
@NielsBasjes 이것은 단순히 도움이되지 않기 때문에 허용되는 대답이 아닙니다. Eclipse의 빌드 경로에 무언가를 추가하면 더 이상 POM과 동기화되지 않으므로 경고가 표시됩니다. 프로젝트 구성을 업데이트하면 시작해야 할 초기 문제였던 추가 빌드 경로 항목이 제거됩니다.
Phil

4

m2e / maven / apt의 새 버전으로 전환 한 후 ... buildhelper에 의해 추가 된 빌드 경로로 인해 중복 된 파일로 인해 빌드 오류가 발생했기 때문에 buildhelper에서 "apt-generated"-폴더를 제거해야했습니다.

M2E의 Update Maven Configuration을 통해 "apt-generated"폴더를 추가하지 않고 Eclipse의 문제를 해결하기 위해이 문제를 해결하기 위해 M2E 플러그인을 작성했습니다. maven-apt-plugin에 구성된 outputDirectories를 프로젝트의 빌드 경로에 추가합니다.

https://apt-m2e.googlecode.com


1
불행히도 @Stefan Wo 귀하의 플러그인 페이지 / repo는 이제 googlecode.com에서 404입니다. Eclipse Marketplace 항목과 함께 업데이트 해 주시겠습니까? 참조 marketplace.eclipse.org/content/apt-m2e-connector
maxxyme

3

m2e 1.0에서는 Maven 플러그인 처리가 변경되었습니다. 코드 생성 플러그인에 대한 특정 m2e 확장이 없을 수 있습니다. 여기 내가 찾은 모든 문서가 있습니다.

버그 보고서 도 관련 이 있을 수 있습니다.


나는 m2e가 새 뛰어난 개발을 많이 가지고 추측
마이클 와일즈

2
문제는 m2eclipse가 예전처럼 Maven 플러그인을 m2eclipse 프로젝트에 적용하는 것만으로도 대부분의 경우 작동하지만 항상 올바른 작업을 수행한다는 보장이 없다는 것입니다. 새로운 접근 방식은 잠재적으로 더 견고하지만 많은 Maven 플러그인에 m2e 대응 기능이 있어야합니다.
Nicola Musatti 2011 년

2

https://bugs.eclipse.org/bugs/show_bug.cgi?id=350081

cxf-codegen-plugin 자체에 수명주기 매핑을 추가하려면 CXF JIRA ( 1 참조 ) 에 요청 합니다. 이것은 m2e 1.1이 필요하지만 수명주기 매핑 API가 cxf-codegen-plugin 및 cxf보다 덜 자주 변경된다는 가정하에 cxf 프로젝트 외부에 커넥터를 구축하는 것보다 더 나은 접근 방식이라고 생각합니다.


0

검색 카탈로그에서 사용 가능한 buildhelper m2e 커넥터를 사용할 수도 있습니다. Eclipse 3.7을 사용하고 있습니다.


0

웹 개발자를위한 Eclipse Java EE IDE. 버전 : Juno 서비스 릴리스 1

mvn archetype:generate \
   -DarchetypeGroupId=org.codehaus.mojo \
   -DarchetypeArtifactId=gwt-maven-plugin \
   -DarchetypeVersion=2.5.0

mvn clean install

완벽하게 작동합니다.

그러나 일식에서는 Asinc 클래스에서 동일한 오류가 발생합니다.

프로젝트에서 F5를 누르십시오. 이 문제를 해결하십시오.


0

이것은 3.0.6 버전이있는 스프링 3.1.1을 사용하여 잘 작동하는 것으로 나타났습니다. 플러그인을 설정하고 pom의 올바른 영역에 넣고 argline 및 endorseddirs를 포함하여 Java 소스를 target / generated-sources / cxf 폴더에 넣은 다음 maven이 소스를 생성했습니다.

....

 <properties>...

   <dependencyManagement>
      <dependencies>.....
   </dependencyManagement>

<dependencies>
   <dependency>....

</dependencies>



<!-- *************************** Build process ************************************* -->
<build>
    <finalName>eSurety</finalName>
    <plugins>
        <!-- Force Java 6 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
        <!-- Deployent on AS from console
        <plugin>
            <groupId>org.jboss.as.plugins</groupId>
            <artifactId>jboss-as-maven-plugin</artifactId>
            <version>${version.jboss.as.maven.plugin}</version>
        </plugin>
        -->

        <!-- wildbill added tomcat plugin -->
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.0</version>              
        </plugin>

        <!-- Surefire plugin before 2.9 version is buggy. No need to declare here,
              it's being referenced below w/ the version
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.12</version>
        </plugin>
        -->

        <!-- developer added these -->   
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <compilerArguments>
                    <endorseddirs>target/generated-sources/cxf</endorseddirs>
                </compilerArguments>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.12</version>
            <configuration>
                <forkMode>once</forkMode>
                <argLine>-Djava.endorsed.dirs=target/generated-sources/cxf</argLine>
            </configuration>
        </plugin>           
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <compilerArguments>
                    <endorseddirs>target/generated-sources/cxf</endorseddirs>
                </compilerArguments>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <forkMode>once</forkMode>
                <argLine>-Djava.endorsed.dirs=target/generated-sources/cxf</argLine>
            </configuration>
        </plugin>                       
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>                       
            <configuration>
                <artifactItems>
                    <artifactItem>
                        <groupId>javax.xml.bind</groupId>
                        <artifactId>jaxb-api</artifactId>
                        <version>2.2</version>
                    </artifactItem>
                    <artifactItem>
                        <groupId>javax.xml.ws</groupId>
                        <artifactId>jaxws-api</artifactId>
                        <version>2.2</version>
                    </artifactItem>
                </artifactItems>
                <outputDirectory>target/generated-sources/cxf</outputDirectory>
            </configuration>                      
        </plugin>                                                 
    </plugins>
</build>



<!-- *********************** Profiles ************************************ -->
<profiles>
    <profile>
        <!-- When built in OpenShift the 'openshift' profile will be 
            used when invoking mvn. -->
        <!-- Use this profile for any OpenShift specific customization 
            your app will need. -->
        <!-- By default that is to put the resulting archive into the 
            'deployments' folder. -->
        <!-- http://maven.apache.org/guides/mini/guide-building-for-different-environments.html -->
        <id>projName</id>
        <build>
            <plugins>                                                   
                <plugin>
                    <groupId>org.apache.cxf</groupId>
                    <artifactId>cxf-codegen-plugin</artifactId>
                    <version>2.5.2</version>                        
                    <executions>
                        <execution>
                            <id>process-sources</id>
                            <phase>generate-sources</phase>                                                                                               
                            <configuration>
                                <fork>once</fork>
                                <additionalJvmArgs>-Djava.endorsed.dirs=target/generated-sources/cxf</additionalJvmArgs>                                          
                            </configuration>
                            <goals>                             
                                <goal>wsdl2java</goal>
                            </goals>
                        </execution>
                    </executions>                       
                    <dependencies>
                        <dependency>
                           <groupId>com.sun.xml.bind</groupId>
                           <artifactId>jaxb-impl</artifactId>
                           <version>2.2</version>
                        </dependency>
                        <dependency>
                           <groupId>com.sun.xml.bind</groupId>
                           <artifactId>jaxb-xjc</artifactId>
                           <version>2.2</version>
                        </dependency>
                     </dependencies>
                </plugin>

                <!-- Actual war created in default target dir -->
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.2</version>                                               
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

wsdl 폴더가 $ {basedir} / src / main / resources에 있으면 자동으로 찾습니다.

도움이 되었기를 바랍니다! ~ 와일드 빌


0

어떤 이유로 든 빌드 도우미 플러그인을 가장 쉬운 방법으로 사용할 수없는 경우 (편리하고 다소 지루하지는 않지만)이 문제를 해결하는 방법은 다음과 같습니다.

  1. 생성 된 소스 코드를 자체 프로젝트 또는 하위 모듈로 분리합니다.
  2. 상위 프로젝트에서 작업 할 때이 프로젝트를 대부분 닫힌 상태로 유지하거나 Eclipse로 가져 오지 않는 것이 좋습니다.
  3. 생성 된 코드가 필요한 상위 프로젝트에서 이제 Maven pom 종속성을 통해 생성 된 소스 코드 프로젝트에 의존하는지 확인하십시오.
  4. 생성 된 코드를 업데이트해야하는 경우 생성 된 코드 프로젝트로 이동하여 mvn install. 이제 마우스 오른쪽 버튼을 클릭하고 Maven-> Update Project ...를 선택하여 상위 프로젝트를 새로 고 칩니다.

이는 일반적으로 SOAP WSDL (Apache CXF) 또는 데이터베이스에서 생성 된 코드 (jOOQ)와 같은 코드 생성을 위해 세미 정적 소스를 사용하는 프로젝트에 적합합니다. APT 및 기타 AspectJ와 유사한 코드의 경우 소스를 자주 편집하기 때문에 제대로 작동하지 않습니다.


-1

빌드 도우미 플러그인에 대한 구성이 우리에게 효과적이었습니다.

그러나 대상 폴더는 항상 주석 처리 자체에 사용하는 플러그인의 구성과 동일해야합니다.

예를 들어 maven-processor-plugin은 대상 폴더 $ {project.build.directory} / generated-sources / apt를 기본값으로 사용합니다. 생성 된 소스 파일의 다른 대상을 원하는 경우 아래와 같이 태그로 설정할 수 있습니다.

<plugin>
<groupId>org.bsc.maven</groupId>
                <artifactId>maven-processor-plugin</artifactId>
                <version>2.1.1</version>
                <executions>
                    <execution>
                        <id>process</id>
                        <goals>
                            <goal>process</goal>
                        </goals>
                        <phase>process-sources</phase>
                        <configuration>
                            <defaultOutputDirectory>apt_generated</defaultOutputDirectory>
                            <processors>
                                <processor>com.any.processor.invoker</processor>
                            </processors>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

-3

여기에 해결책이 있습니다

  1. 마커보기 열기 (창>보기 표시
  2. 오류 메시지를 마우스 오른쪽 버튼으로 클릭하십시오.
  3. 빠른 수정 선택
  4. 마침 클릭
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.