在Maven2多项目构建中缺少AAR文件
时间:2020-03-05 18:56:16 来源:igfitidea点击:
我正在尝试使用maven2建立一个axis2项目。我的项目配置为带有AAR,WAR和EAR模块的父项目。当我运行父项目的包目标时,控制台将显示成功的构建并创建所有文件。但是,由AAR项目生成的AAR文件不包括在生成的WAR项目中。 AAR项目被列为WAR项目的依赖项。当我明确运行WAR的软件包目标时,AAR文件便包含在WAR文件中。
为什么在运行孩子的包裹目标时父母的包裹目标不包括必要的依存关系?
我在战争项目中使用的是maven-war-plugin v2.1-alpha-2.
父POM:
<parent> <groupId>companyId</groupId> <artifactId>build</artifactId> <version>1.0.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>com.nationwide.nf</groupId> <artifactId>parent</artifactId> <packaging>pom</packaging> <version>1.0.0-SNAPSHOT</version> <modules> <module>ws-war</module> <module>ws-aar</module> <module>ws-ear</module> </modules>
AAR POM:
<parent> <artifactId>parent</artifactId> <groupId>companyId</groupId> <version>1.0.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>companyId</groupId> <artifactId>ws-aar</artifactId> <version>1.0.0-SNAPSHOT</version> <description/> <packaging>aar</packaging> <dependencies>...</dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin> <plugin> <groupId>org.apache.axis2</groupId> <artifactId>axis2-wsdl2code-maven-plugin</artifactId> <version>1.4</version> <configuration>...</configuration> <executions> <execution> <goals> <goal>wsdl2code</goal> </goals> <id>axis2-gen-sources</id> </execution> </executions> </plugin> <plugin> <groupId>org.apache.axis2</groupId> <artifactId>axis2-aar-maven-plugin</artifactId> <version>1.4</version> <extensions>true</extensions> <configuration>...</configuration> </plugin> </plugins> </build>
战争POM:
<parent> <artifactId>parent</artifactId> <groupId>companyId</groupId> <version>1.0.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>companyId</groupId> <artifactId>ws-war</artifactId> <packaging>war</packaging> <version>1.0.0-SNAPSHOT</version> <description/> <dependencies> <dependency> <groupId>companyId</groupId> <artifactId>ws-aar</artifactId> <type>aar</type> <version>1.0.0-SNAPSHOT</version> </dependency> . . . </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.1-alpha-2</version> <configuration> <warName>appName</warName> </configuration> </plugin> </plugins> </build>
谢谢,
乔
解决方案
回答
我们是否尝试过在依赖项中使用" type"元素?例如:
<dependency> <groupId>group-a</groupId> <artifactId>artifact-b</artifactId> <version>1.0</version> <type>aar</type> </dependency>
在没有看到我们实际的pom文件的情况下很难确定问题是什么。
更新:
如果从父项目中运行:
mvn clean install
- 就问题而言,"安装"与"软件包"的行为是否有所不同?
- 我们是否在本地Maven存储库(〜/ .m2 / repository / com / mycompany /.../)中看到.aar文件?
附带说明一下,我对Maven War插件从未感到非常满意。我总是最终使用maven程序集插件。它似乎工作得更好并且更加一致。另外,请确保我们使用的是最新版本的maven(2.0.9)。我花了半天时间来解决一个类似的问题,该问题已在最新版本中修复。
回答
通过将以下插件添加到ws-war pom文件中,我能够使我的Maven构建正常工作:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <phase>process-classes</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory> ${project.build.directory}/${project.build.finalName}/WEB-INF/services </outputDirectory> <includeArtifactIds> ws-aar </includeArtifactIds> </configuration> </execution> </executions> </plugin>