【问题标题】:Maven generate-sources folder not being picked up by EclipseEclipse 未拾取 Maven generate-sources 文件夹
【发布时间】:2012-05-29 21:22:04
【问题描述】:

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

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

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

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

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

我的 Maven 构建包括

  • 仅包含代码生成器的 Java 代码的生成器项目。

  • 一个生成器插件项目,其中仅包含将生成器包装为 Maven 插件的代码。这取决于生成器项目。

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

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

让我有点困惑的是,它指的是 ...:pom:1.0.0-SNAPSHOT,而实际上我的生成器插件被定义为 maven-plugin。

这是一个明智的做法吗?

为什么我会收到“未能找到...”错误?

为什么 Eclipse 不提取我的生成源文件夹?

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

【问题讨论】:

  • 您是否有一个多模块结构,将您的插件、生成器代码等包含在一个结构中,或者您是否有单独的项目?
  • 它是一个扁平的多模块结构。每个模块都作为单独的项目导入 Eclipse。
  • 冒着说明明显的风险,如果它从命令行运行良好(并且您正在从 eclipse 正在查看的同一目录运行终端命令),那么您的问题在于 eclipse 或 eclipse插入。但是,听起来你的 Eclipse 设置要么误解了你的生成器插件是什么,要么误解了去哪里寻找它(你的 repo 上是否有版本为 1.0.0-SNAPSHOT 的 pom,或者只是一个 jar?)它应该是无论如何,首先在本地寻找它,所以理论上它应该在你的 repo 中找到它 - 但是,如果它正在寻找一个 pom 并找到一个 jar 它会出错。
  • Eclipse 需要一个 m2e 连接器或它使用的任何 Maven 插件的生命周期映射。由于您可能还没有为您的自定义插件编写连接器,请考虑在您的 POM 中定义一个 mapping
  • 我认为这可能是因为我确实有一个生命周期映射,但我将它作为一个 xml 文件包含在我的生成器插件中。我以为我有支持此功能的 m2e 版本,因为我下载了我认为是最新的版本。相反,我不得不将生命周期映射放在使用生成器插件的项目的 pom 文件中。这似乎有效。

标签: eclipse maven m2eclipse m2e


【解决方案1】:

从存储库下载 lib 时出现问题。我曾经有过同样的错误信息。

  • 您是否查看了本地存储库?

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

    在 Eclipse 中,也可以运行 Right button > Maven > Update Project

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

  • 您是否在任何防火墙或代理之后?

【讨论】:

    【解决方案2】:

    使用 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 中,它会自动找到它

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2019-01-13
      • 2016-11-20
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 2017-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多