我正在将我的构建从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连接器。
答案 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中,它会自动找到它
希望这有帮助!