2017-08-21 125 views
2

我正在嘗試爲Maven構建一個自定義報告插件,與mvn site一起使用。創建一個Maven報告插件

但我找不到任何有關如何繼續進行更新的文檔。

有關創建插件的官方文檔提到了擴展org.apache.maven.plugin.AbstractMojo。但這是關於通常構建生命週期的「常規」插件。這不適用於site構建生命週期。

上有一個類似的問題SO(Writing a maven custom report plugin; how do I generate the html body or "middle" of my report?),它是指從2015年的文件,其中提到了AbstractMavenReport類而不是AbstractMojo類,但我找不到它的任何地方在我的項目需要進口。

我也看了一些最近報告插件的代碼(changes插件在這裏:http://svn.apache.org/viewvc/maven/plugins/tags/maven-changes-plugin-2.12.1/),但我找不到我在找什麼。

是否至少有報告插件的原型?任何人都有這方面的經驗?

謝謝! - 貝特朗更多

+0

這裏沒有很多文檔。你能告訴我們你想要做什麼樣的插件嗎?最好的事情就是你所做的。 Whatch現有插件的代碼。 如果你告訴我們一些關於你想要做的事情,我們可以建議一個插件來觀看代碼。 –

+0

我正在嘗試構建一個基於項目的某些源代碼(用第三方編輯器的專有語言編寫)生成參考指南的插件。像Javadoc,但有不同的輸入和不同的語法。我實際上找到了我的答案(見下面的答案)。謝謝! –

回答

1

挖掘一下,我發現我的答案: http://maven.apache.org/shared/maven-reporting-impl/index.html

和工作例如: http://svn.apache.org/viewvc/maven/shared/tags/maven-reporting-impl-3.0.0/src/it/setup-reporting-plugin/

所以,基本上,你需要這在的pom.xml

<dependencies> 
    <dependency> 
     <groupId>org.apache.maven.reporting</groupId> 
     <artifactId>maven-reporting-impl</artifactId> 
     <version>@[email protected]</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.maven.reporting</groupId> 
     <artifactId>maven-reporting-api</artifactId> 
     <version>3.0</version> 
    </dependency> 

    <!-- plugin API and plugin-tools --> 
    <dependency> 
     <groupId>org.apache.maven</groupId> 
     <artifactId>maven-plugin-api</artifactId> 
     <version>3.0.5</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.maven.plugin-tools</groupId> 
     <artifactId>maven-plugin-annotations</artifactId> 
     <version>3.3</version> 
     <scope>provided</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.maven.shared</groupId> 
     <artifactId>maven-shared-utils</artifactId> 
     <version>3.2.0</version> 
    </dependency> 
    </dependencies> 

然後,你的主類必須擴展AbstractMavenReport

import java.util.Locale; 
import org.apache.maven.plugins.annotations.Mojo; 
import org.apache.maven.reporting.AbstractMavenReport; 
import org.apache.maven.reporting.MavenReportException; 

/** 
* Typical code to copy as a reporting plugin start: choose the goal name, then implement getOutputName(), 
* getName(Locale), getDescription(Locale) and of course executeReport(Locale). 
*/ 
@Mojo(name = "custom") 
public class CustomReport 
    extends AbstractMavenReport 
{ 
    public String getOutputName() 
    { 
     return "custom-report"; 
    } 

    public String getName(Locale locale) 
    { 
     return "Custom Maven Report"; 
    } 

    public String getDescription(Locale locale) 
    { 
     return "Custom Maven Report Description"; 
    } 

    @Override 
    protected void executeReport(Locale locale) 
     throws MavenReportException 
    { 
     // direct report generation using Doxia: compare with CustomReportRenderer to see the benefits of using 
     // ReportRenderer 
     getSink().head(); 
     getSink().title(); 
     getSink().text("Custom Report Title"); 
     getSink().title_(); 
     getSink().head_(); 

     getSink().body(); 

     getSink().section1(); 
     getSink().sectionTitle1(); 
     getSink().text("section"); 
     getSink().sectionTitle1_(); 

     getSink().text("Custom Maven Report content."); 
     getSink().section1_(); 

     getSink().body_(); 
    } 
} 

希望這將有助於Maven Reporting插件的未來開發者! ;-)

+1

僅供參考,我剛剛開始了一個官方的Maven介紹https://maven.apache.org/guides/plugin/guide-java-report-plugin-development.html,它將詳細解釋爲什麼它就像你描述的那樣。幫助和反饋讚賞:) – hboutemy

+0

謝謝Hervé!我認爲這對開發人員來說是最有幫助的!我們能幫你什麼嗎? –

+0

如果你可以在這個頁面上提供拉請求,這將幫助我很多 – hboutemy