Eclipse没有捕获Maven generate-sources文件夹

时间:2012-05-23 10:27:06

标签: eclipse maven m2eclipse m2e

我正在将我的构建从Ant迁移到Maven。 Ant构建用于编译“代码生成器”,执行这个“代码生成器”,它生成一组Java和C代码。然后它使用生成的Java代码并将其与一些额外的代码一起编译生成一个jar。

我已经很容易在Maven中复制了这个,当我从命令行运行但Eclipse正在抱怨并且给我一个与pom文件有关的错误时,它运行良好

  

未能找到{group.id}:{artifact.id}:pom:1.0.0-SNAPSHOT in   http:// {我们的内部网站存储库} / nexus / content / groups / public   缓存在本地存储库中,不会重新尝试解析   直到快照的更新间隔已过或更新为止   强制

其中group.id和artifact.id是我的代码生成器插件的组和工件ID

并且任何引用生成的代码的代码也无法编译。

我的maven构建包含

  • 一个生成器项目,它只包含代码生成器的Java代码。

  • 一个generator-plugin项目,它只包含将生成器包装为Maven插件的代码。这取决于发电机项目。

  • 使用插件生成代码的xyz项目。代码最终在此项目的target / generated-sources / xxx文件夹中。我按照Maven compile with multiple src directories配置了build-helper-maven-plugin以包含这个额外的源目录。

如果我手动将生成的源文件夹添加到Eclipse构建路径中,那些与该代码不相关的代码的所有错误都会在该项目上消失,但不会在任何下游项目上消失,并且列出了“找不到...”错误以上遗骸。

让我感到困惑的是它指的是......:pom:1.0.0-SNAPSHOT实际上我的generator-plugin被定义为maven-plugin。

这是一种明智的做法吗?

为什么我收到“找不到......”错误?

为什么Eclipse没有选择我的生成源文件夹?

我还应该说我在我的Eclipse IDE中安装了m2e插件和用于build-help-maven-plugin的m2e连接器。

2 个答案:

答案 0 :(得分:0)

从存储库下载lib时看起来像是一个问题。我已经有一次相同的错误消息。

  • 您是否看过本地存储库?

    转到.m2文件夹并查找/nexus/content/groups/public。如果文件夹在那里,打开它,看看是否正确下载了lib。如果没有,请尝试删除该文件夹并尝试运行mvn install以强制下载lib。

    在Eclipse上,也运行Right button > Maven > Update Project

  • 您使用的是Artifactory等本地存储库,不是吗?还要查找repo1-cache(或类似)文件夹中的lib。看看罐子是否存在。

  • 您是否支持任何防火墙或代理?

答案 1 :(得分:0)

使用eclipse Indigo3.7,这是我发现使用spring 3.1.1工作得很好,它也有3.0.6版本。一旦我获得了插件设置并放入pom的正确区域并包含argline和endorseddirs以将java源放入target / generated-sources / cxf文件夹,然后maven生成源可以。

     ....

 <properties>...

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

<dependencies>
   <dependency>....

</dependencies>



<!-- *************************** Build process ************************************* -->
<build>
    <finalName>projName</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中,它会自动找到它

希望这有帮助!