5

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

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

在 http://{our internal site repository}/nexus/content/groups/public 中找不到 {group.id}:{artifact.id}:pom:1.0.0-SNAPSHOT 已缓存在本地存储库中,解决方法将在快照的更新间隔过去或强制更新之前不会重新尝试

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

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

我的 Maven 构建包括

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

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

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

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

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

这是一个明智的做法吗?

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

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

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

4

2 回答 2

0

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

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

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

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

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

  • 你在任何防火墙或代理后面吗?

于 2013-03-26T17:24:37.543 回答
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 中,它会自动找到它

希望这可以帮助!

于 2013-05-01T20:01:19.117 回答