programing

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

nasanasas 2020. 9. 9. 08:07
반응형

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


이클립스에 메이븐 프로젝트가 있고 주석 프로세서를 실행하여 코드를 생성하는 메이븐 목표가 있습니다. 이 코드의 출력 폴더는 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 플러그인으로 이에 대한 해결 방법 / 솔루션을 찾을 수 있는지 확인하고 싶습니다.


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>

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


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

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

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


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

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

https://apt-m2e.googlecode.com


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

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


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 프로젝트 외부에 커넥터를 구축하는 것보다 더 나은 접근 방식이라고 생각합니다.


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


웹 개발자를위한 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를 누르십시오. 이 문제를 해결하십시오.


이것은 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에 있으면 자동으로 찾습니다.

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


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

  1. 생성 된 소스 코드를 자체 프로젝트 또는 하위 모듈로 분리하십시오.
  2. You will want to keep this project predominately closed or not imported into Eclipse when you are working on the parent project.
  3. In the parent project that needs the generated code make sure to now depend on the generated source code project via Maven pom dependency.
  4. When you need to update the generated code go to the generated code project and run mvn install. Now refresh the parent project by right clicking and selecting Maven->Update Project...

This generally works well for projects that use a semi static source for code generation such as SOAP WSDLs (Apache CXF) or code generated from a database (jOOQ). For APT and other AspectJ-like-code it doesn't work as well because you are editing the source frequently.


the configuration to the build helper plugin did work for us.

but be aware, that the destination folder always has to be equal to the configuration of the plugin u're using for the annotation processing itself.

for example the maven-processor-plugin uses the target folder ${project.build.directory}/generated-sources/apt as default. if you wish another destination for your generated source files you can set it by the tag as shown below.

<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>

Here is the solution

  1. Open Marker View (Window > Show View
  2. Right-click on the Error message
  3. Select Quick Fix
  4. Click Finish

참고URL : https://stackoverflow.com/questions/7160006/m2e-and-having-maven-generated-source-folders-as-eclipse-source-folders

반응형