2016-03-29 136 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

相關問題