2016-03-29 93 views
2

当Maven项目执行maven插件时,我想很好地识别出情况,因为当执行超出maven项目时,我需要不同的默认参数。如何检测maven插件是否在maven项目中执行?

我可以将@Component MavenProject project注入到插件Mojo中,但是当没有pom.xml时,它被设置为test:test:jar:1

我可以注入基本目录@Parameter(defaultValue = "${basedir}") File baseDir并检查pom.xml文件,但这种味道(与polyglot maven没有pom.xml了)。

如何检查项目是否在Maven项目内部或外部执行?


我有特定的目标,我想对这两种情况使用相同的目标。

回答

1

我觉得这个问题没有得到足够的回答。我的建议是:

@Component 
private MavenSession mavenSession; 

boolean insideMavenProject = mavenSession.getRequest().isProjectPresent() 
+0

谢谢,为什么这段代码需要'maven-compat'作为提供的依赖项? – MariuszS

+0

@MariuszS,我不熟悉maven-compat。我的插件取决于maven-plugin-annotations 3.4和maven-core 3.3.3 – michaldo

1

重要的是,你清楚地辨认哪些目标应该从CLI使用通过以下仅应在POM文件中使用......可以做出基本决定了一个决定:

@Mojo(name = "xxxx", requiresProject = true,...) 

所以requiresProject意味着你需要有一个pom.xml这意味着没有通过CLI调用。

如果你省略了这个,你可以给CLI使用一个目标的机会。所以,最好是用一个目标,其目的是从CLI并用于从pom.xml中使用的其他目标调用..

而且注入一个MavenProject你应该这样做是这样的:

@Parameter(defaultValue = "${project}", required=true, readonly=true) 
private MavenProject project; 

导致MavenProject不是@Component。除此之外,我不明白你总是关于test:test:jar:1的信息......而我感兴趣的是你想​​写什么样的插件?

+0

插件https://github.com/Codearte/accurest-maven-plugin/tree/master/maven-plugin,我想没有Maven项目运行'generateStubs'。当没有pom.xml时,注入的MavenProject具有MavenModel:'test:test:jar:1'。 – MariuszS

相关问题