我正在一个多模块项目中开发一个Maven插件,这是我以后想在同一个项目中使用的。这是该项目的布局:
sk:a:1.0:pom
|
--sk:a0:1.0:jar (the custom plugin)
|
--sk:a1:1.0:pom
| |
| --sk:a11:1.0:jar (a simple JAVA jar)
| |
| --sk:a12:1.0:jar (a simple JAVA jar)
|
sk:a2:1.0:pomsk:a2:1.0依赖sk:a11:1.0和sk:a12:1.0,插件sk:a0:1.0:
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>sk</groupId>
<artifactId>a</artifactId>
<version>1.0</version>
</parent>
<artifactId>a2</artifactId>
<dependencies>
<dependency>
<groupId>sk</groupId>
<artifactId>a11</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>sk</groupId>
<artifactId>a12</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>sk</groupId>
<artifactId>a0</artifactId>
<version>1.0</version>
<executions>
...
</executions>
</plugin>
</plugins>
</build>
</project>来自sk:a0:1.0的自定义插件在其execute()中调用
Set<Artifact> artifacts = project.getDependencyArtifacts();方法并对所有工件进行迭代,方法如下:
for(Iterator<Artifact> iterator = artifacts.iterator(); iterator.hasNext();)
{
Artifact artifact = iterator.next();
getLog().info((artifact.getFile() == null ? "artifact NULL" : "artifact OK"));
}现在它显示“工件空”。在我的插件中,我需要能够读取工件的文件(比如java.io.File)。如何获得每个依赖项的文件?
谢谢,
SK
发布于 2014-01-17 14:19:23
看起来问题在于,在执行mojo时,Maven尚未解决项目的所有依赖关系。
因此,例如,如果您的mojo运行在compile阶段,那么maven尚未解决test依赖项(那些在pom中使用测试标记的依赖项),对于所有这些test工件,还没有可用的文件。
您可以使用@requiresDependencyResolution <required-classpath> mojo标记来告诉maven解决所需的依赖关系。
在documentation中,它说明了关于这个注释的如下内容:
将此Mojo标记为要求在指定的类路径中的依赖项在执行之前被解析。
因此,在Mojo中,您可以简单地在mojo的javadoc中添加以下注释:
/**
* @goal your-goal
* @requiresDependencyResolution test
*/
public class YourMojo extends AbstractMojo这将告诉maven解决test类路径中包含的所有依赖项(基本上是所有依赖项)。因此,您的artifact.getFile()调用现在应该始终返回一个文件。
https://stackoverflow.com/questions/21187180
复制相似问题