-
\ No newline at end of file
+
diff --git a/jira/plugin.properties b/jira/plugin.properties
index 1a5c2f44..49886a0d 100644
--- a/jira/plugin.properties
+++ b/jira/plugin.properties
@@ -17,4 +17,13 @@
# -------------------------------------------------------------------
# P L U G I N P R O P E R I E S
# -------------------------------------------------------------------
+maven.jira.webUser=
+maven.jira.webPassword=
+maven.jira.jiraUser=
+maven.jira.jiraPassword=
maven.jira.nbentries=1000
+maven.jira.filter=
+maven.jira.status=Open,In Progress,Reopened
+maven.jira.resolution=Unresolved
+maven.jira.priority=
+maven.jira.component=
diff --git a/jira/src/main/org/apache/maven/jira/JiraDownloader.java b/jira/src/main/org/apache/maven/jira/JiraDownloader.java
index 27f41c04..becf1560 100644
--- a/jira/src/main/org/apache/maven/jira/JiraDownloader.java
+++ b/jira/src/main/org/apache/maven/jira/JiraDownloader.java
@@ -17,184 +17,471 @@ package org.apache.maven.jira;
* ====================================================================
*/
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.httpclient.Credentials;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HostConfiguration;
import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpState;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.StatusLine;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.methods.GetMethod;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-
import org.apache.maven.jelly.MavenJellyContext;
import org.apache.maven.project.Project;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.PrintWriter;
-
-public class JiraDownloader
-{
+/**
+ * Gets relevant issues in RSS from a given JIRA installation.
+ *
+ * Based on version 1.1.2 and patch by Dr. Spock (MPJIRA-8)
+ *
+ * @author mfranken@xebia.com
+ */
+public final class JiraDownloader {
/**
- * Log for debug output
+ * Log for debug output.
*/
- private static Log LOG = LogFactory.getLog(JiraDownloader.class);
-
- /** Output file for xml document */
+ private static Log log = LogFactory.getLog(JiraDownloader.class);
+
+ /** Output file for xml document. */
private File output;
-
- /** Number of entries max */
+
+ /** The maximum number of entries to show. */
private int nbEntriesMax;
-
+
+ /** The filter to apply to query to JIRA. */
+ private String filter;
+
+ /** Ids of status to show, as comma separated string. */
+ private String statusIds;
+
+ /** Ids of resolution to show, as comma separated string. */
+ private String resolutionIds;
+
+ /** Ids of priority to show, as comma separated string. */
+ private String priorityIds;
+
+ /** The component to show. */
+ private String component;
+
+ /** The username to log into JIRA. */
+ private String jiraUser;
+
+ /** The password to log into JIRA. */
+ private String jiraPassword;
+
+ /** The username to log into webserver. */
+ private String webUser;
+
+ /** The password to log into webserver. */
+ private String webPassword;
+
+ /** The maven project. */
private Project project;
-
+
+ /** Mapping containing all JIRA status values. */
+ private static Map statusMap = new HashMap();
+
+ /** Mapping containing all JIRA resolution values. */
+ private static Map resolutionMap = new HashMap();
+
+ /** Mapping containing all JIRA priority values. */
+ private static Map priorityMap = new HashMap();
+
+ static {
+ statusMap.put("Open", "1");
+ statusMap.put("In Progress", "3");
+ statusMap.put("Reopened", "4");
+ statusMap.put("Resolved", "5");
+ statusMap.put("Closed", "6");
+
+ resolutionMap.put("Unresolved", "-1");
+ resolutionMap.put("Fixed", "1");
+ resolutionMap.put("Won't Fix", "2");
+ resolutionMap.put("Duplicate", "3");
+ resolutionMap.put("Incomplete", "4");
+ resolutionMap.put("Cannot Reproduce", "5");
+
+ priorityMap.put("Blocker", "1");
+ priorityMap.put("Critical", "2");
+ priorityMap.put("Major", "3");
+ priorityMap.put("Minor", "4");
+ priorityMap.put("Trivial", "5");
+ }
+
+ /**
+ * Creates a filter given the maven.jira parameters and some defaults.
+ *
+ * @return request parameters to be added to URL used for downloading the JIRA issues
+ */
+ private String createFilter() {
+ if (this.filter != null && this.filter.length() > 0) {
+ if (this.filter.charAt(0) == '&') {
+ return this.filter.substring(1);
+ }
+ return this.filter;
+ }
+
+ StringBuffer localFilter = new StringBuffer();
+ // get the Status Ids
+ if (statusIds != null) {
+ String[] stats = statusIds.split(",");
+ for (int i = 0; i < stats.length; i++) {
+ String statusParam = (String) statusMap.get(stats[i]);
+ if (statusParam != null) {
+ localFilter.append("&statusIds=" + statusParam);
+ }
+ }
+ }
+ // get the Priority Ids
+ if (priorityIds != null) {
+ String[] prios = priorityIds.split(",");
+ for (int i = 0; i < prios.length; i++) {
+ String priorityParam = (String) priorityMap.get(prios[i]);
+ if (priorityParam != null) {
+ localFilter.append("&priorityIds=" + priorityParam);
+ }
+ }
+ }
+ if (resolutionIds != null) {
+ // get the Resolution Ids
+ String[] resos = resolutionIds.split(",");
+ for (int i = 0; i < resos.length; i++) {
+ String resoParam = (String) resolutionMap.get(resos[i]);
+ if (resoParam != null) {
+ localFilter.append("&resolutionIds=" + resoParam);
+ }
+ }
+ }
+ // add all components
+ if (component != null) {
+ String[] components = component.split(",");
+ for (int i = 0; i < components.length; i++) {
+ if (components[i].length() > 0) {
+ localFilter.append("&component=" + components[i]);
+ }
+ }
+ }
+
+ // add default sorting (by priority and then creation date)
+ String sort = "&sorter/field=created&sorter/order=DESC" + "&sorter/field=priority&sorter/order=DESC";
+ return localFilter + sort;
+ }
+
+ /**
+ * Execute the query on the JIRA server.
+ *
+ * @throws Exception
+ * on error
+ */
+ public void doExecute() throws Exception {
+ if (project == null) {
+ throw new Exception("No project set.");
+ } else {
+ if (project.getIssueTrackingUrl() == null) {
+ throw new Exception("No issue tracking url set.");
+ }
+ }
+
+ try {
+ HttpClient cl = new HttpClient();
+ HttpState state = new HttpState();
+ HostConfiguration hc = new HostConfiguration();
+ cl.setHostConfiguration(hc);
+ cl.setState(state);
+
+ determineProxy(cl);
+ // get the Jira URL and project id
+ String url = project.getIssueTrackingUrl();
+ // chop off the parameter part
+ int pos = url.indexOf("?");
+ // and get the id while we're at it
+ String id = "";
+ if (pos >= 0) {
+ // url
+ id = url.substring(url.lastIndexOf("=") + 1);
+ }
+ // TODO: fail the build in the else block, issueTrackingUrl has to include id
+
+ String jiraUrl = url.substring(0, url.lastIndexOf("/"));
+ if (jiraUrl.endsWith("secure")) {
+ jiraUrl = jiraUrl.substring(0, jiraUrl.lastIndexOf("/"));
+ }
+ log.info("Jira lives at: " + jiraUrl);
+ doAuthentication(cl, jiraUrl);
+
+ // create the URL for getting the proper iussues from JIRA
+ String fullURL = jiraUrl + "/secure/IssueNavigator.jspa?view=rss&pid=" + id;
+ fullURL += createFilter();
+ fullURL += "&tempMax=" + nbEntriesMax + "&reset=true&decorator=none";
+
+ // execute the GET
+ download(cl, fullURL);
+ } catch (Exception e) {
+ log.error("Error accessing " + project.getIssueTrackingUrl(), e);
+ }
+ }
+
+ /**
+ * Authenticate against webserver and into JIRA if we have to.
+ *
+ * @param client
+ * the HttpClient
+ * @param jiraUrl
+ * the JIRA installation
+ */
+ private void doAuthentication(HttpClient client, final String jiraUrl) {
+ // check and prepare for basic authentication
+ if (webUser != null && webUser.length() > 0) {
+ client.getState().setAuthenticationPreemptive(true);
+ Credentials defaultcreds = new UsernamePasswordCredentials(webUser, webPassword);
+ log.info("Using username: " + webUser + " for Basic Authentication against the webserver at " + jiraUrl);
+ client.getState().setCredentials(null, null, defaultcreds);
+ }
+
+ // log into JIRA if we have to
+ String loginUrl = null;
+ if (jiraUser != null && jiraUser.length() > 0 && jiraPassword != null) {
+ StringBuffer loginLink = new StringBuffer(jiraUrl);
+ loginLink.append("/login.jsp?os_destination=/secure/");
+ loginLink.append("&os_username=").append(jiraUser);
+ log.info("Login URL: " + loginLink + "&os_password=*******");
+ loginLink.append("&os_password=").append(jiraPassword);
+ loginUrl = loginLink.toString();
+ }
+
+ // execute the login
+ if (loginUrl != null) {
+ GetMethod loginGet = new GetMethod(loginUrl);
+ try {
+ client.executeMethod(loginGet);
+ log.info("Succesfully logged in into JIRA.");
+ } catch (Exception e) {
+ if (log.isDebugEnabled()) {
+ log.error("Error trying to login into JIRA:", e);
+ } else {
+ log.error("Error trying to login into JIRA. Cause is: " + e.getLocalizedMessage());
+ }
+ // continue any way, probably will fail later if authentication was necesaaray afterall
+ }
+ }
+ }
+
+ /**
+ * Setup proxy access if we have to.
+ *
+ * @param client
+ * the HttpClient
+ */
+ private void determineProxy(HttpClient client) {
+ // see whether there is any proxy defined in maven
+ if (project == null) {
+ log.error("No project set. No proxy info available.");
+ return;
+ }
+ MavenJellyContext ctx = project.getContext();
+ if (ctx == null) {
+ log.error("Maven project has no context. No proxy info available.");
+ return;
+ }
+ String proxyHost = ctx.getProxyHost();
+
+ if (proxyHost != null) {
+ String proxyPort = ctx.getProxyPort();
+ client.getHostConfiguration().setProxy(proxyHost, Integer.parseInt(proxyPort));
+ log.info("Using proxy: " + proxyHost + " at port " + proxyPort);
+ String proxyUser = ctx.getProxyUserName();
+ if (proxyUser != null) {
+ log.info("Using proxy user: " + proxyUser);
+ String proxyPass = ctx.getProxyPassword();
+ client.getState().setProxyCredentials(null, null, new UsernamePasswordCredentials(proxyUser, proxyPass));
+ }
+ }
+ }
+
+ /**
+ * Downloads the given link using the configured HttpClient, possibly following redirects.
+ *
+ * @param cl
+ * the HttpClient
+ * @param link
+ * the JiraUrl
+ * @return
+ */
+ private void download(final HttpClient cl, final String link) {
+ try {
+ GetMethod gm = new GetMethod(link);
+ log.info("Downloading " + link);
+ gm.setFollowRedirects(true);
+ cl.executeMethod(gm);
+ final String strGetResponseBody = gm.getResponseBodyAsString();
+ // write the reponse to file
+ PrintWriter pw = new PrintWriter(new FileWriter(output));
+ pw.print(strGetResponseBody);
+ pw.close();
+ StatusLine sl = gm.getStatusLine();
+ if (sl == null) {
+ log.info("Unknown error validating link : " + link);
+ return;
+ }
+
+ // if we get a redirect, do so
+ if (gm.getStatusCode() == HttpStatus.SC_MOVED_TEMPORARILY) {
+ Header locationHeader = gm.getResponseHeader("Location");
+ if (locationHeader == null) {
+ log.info("Site sent redirect, but did not set Location header");
+ } else {
+ String newLink = locationHeader.getValue();
+ log.debug("Following redirect to " + newLink);
+ download(cl, newLink);
+ }
+ }
+
+ if (gm.getStatusCode() != HttpStatus.SC_OK) {
+ log.warn("Received: [" + gm.getStatusCode() + "]");
+ }
+ } catch (HttpException e) {
+ if (log.isDebugEnabled()) {
+ log.error("Error downloading issues from JIRA:", e);
+ } else {
+ log.error("Error downloading issues from JIRA. Cause is: " + e.getLocalizedMessage());
+ }
+ } catch (IOException e) {
+ if (log.isDebugEnabled()) {
+ log.error("Error downloading issues from JIRA:", e);
+ } else {
+ log.error("Error downloading issues from JIRA. Cause is: " + e.getLocalizedMessage());
+ }
+ }
+ }
+
/**
* Set the output file for the log.
- * @param output the output file
+ *
+ * @param thisOutput
+ * the output file
*/
- public void setOutput(File output)
- {
- this.output = output;
- }
-
- /**
- * @return Project
- */
- public Object getProject()
- {
- return project;
+ public void setOutput(final File thisOutput) {
+ this.output = thisOutput;
}
/**
* Sets the project.
- * @param project The project to set
+ *
+ * @param thisProject
+ * The project to set
*/
- public void setProject(Object project)
- {
- //System.out.println("Setting project: " + project);
- this.project = (Project) project;
+ public void setProject(final Object thisProject) {
+ this.project = (Project) thisProject;
}
-
+
/**
- * Sets the number of entries.
- * @param nbEntries The number of entries
+ * Sets the maximum number of Issues to show.
+ *
+ * @param nbEntries
+ * The maximum number of Issues
*/
- public void setNbEntries(int nbEntries)
- {
+ public void setNbEntries(final int nbEntries) {
nbEntriesMax = nbEntries;
}
-
- public void doExecute() throws Exception
- {
- MavenJellyContext ctx;
- String proxyHost;
- String proxyPort;
- String proxyUser;
- String proxyPass;
- String link;
-
- if (getProject() == null)
- {
- throw new Exception("No project set.");
- }
- else
- {
- if (((Project) getProject()).getIssueTrackingUrl() == null)
- {
- throw new Exception("No issue tracking url set.");
- }
- else
- {
- String url = ((Project) getProject()).getIssueTrackingUrl();
- int pos = url.indexOf("?");
- String id = url.substring(pos+4);
- url = url.substring(0, url.lastIndexOf("/"));
- link = url + "/secure/IssueNavigator.jspa?view=rss&pid=" + id + "&sorter/field=issuekey&sorter/order=DESC&sorter/field=status&sorter/order=DESC&tempMax=" + String.valueOf(nbEntriesMax) + "&reset=true&decorator=none";
- }
- }
-
- ctx = ((Project) getProject()).getContext();
-
- proxyHost = ctx.getProxyHost();
- proxyPort = ctx.getProxyPort();
- proxyUser = ctx.getProxyUserName();
- proxyPass = ctx.getProxyPassword();
-
- try
- {
- HttpClient cl = new HttpClient();
- HostConfiguration hc = new HostConfiguration();
- if (proxyHost != null)
- {
- hc.setProxy(proxyHost, Integer.parseInt(proxyPort));
- }
- HttpState state = new HttpState();
-
- if (proxyUser != null && proxyPass != null)
- {
- state.setProxyCredentials(null, null, new UsernamePasswordCredentials(proxyUser, proxyPass));
- }
-
- cl.setHostConfiguration(hc);
- cl.setState(state);
-
- // execute the GET
- GetMethod gm = download(cl, link);
- StatusLine sl = gm.getStatusLine();
-
- if (sl == null) {
- LOG.info("Unknown error validating link : " + link);
- return;
- }
-
- if (gm.getStatusCode() == HttpStatus.SC_MOVED_TEMPORARILY)
- {
- Header locationHeader = gm.getResponseHeader("Location");
- if (locationHeader == null) {
- LOG.info("Site sent redirect, but did not set Location header");
- } else {
- String newLink = locationHeader.getValue();
- LOG.debug("Following 1 redirect to " + newLink);
- gm = download(cl, newLink);
- }
- }
-
- if (gm.getStatusCode() != HttpStatus.SC_OK)
- {
- String msg = "Received: [" + gm.getStatusCode() + "] for " + link;
- LOG.info(msg);
- System.out.println(msg);
- }
-
- }
- catch (Exception e)
- {
- LOG.warn("Error accessing " + link);
- e.printStackTrace();
- }
+ /**
+ * Sets the statusIds.
+ *
+ * @param thisStatusIds
+ * The id(s) of the status to show, as comma separated string
+ */
+ public void setStatusIds(final String thisStatusIds) {
+ statusIds = thisStatusIds;
}
-
- private GetMethod download(HttpClient cl, String link)
- {
- GetMethod gm = new GetMethod(link);
- try
- {
- System.out.println("Downloading " + link);
- gm.setFollowRedirects(true);
- cl.executeMethod(gm);
- final String strGetResponseBody = gm.getResponseBodyAsString();
- PrintWriter pw = new PrintWriter(new FileWriter(output));
- pw.print(strGetResponseBody);
- pw.close();
- }
- catch (Exception e)
- {
- System.out.println("Error downloading " + link);
- }
- return gm;
+
+ /**
+ * Sets the priorityIds.
+ *
+ * @param thisPriorityIds
+ * The id(s) of the priority to show, as comma separated string
+ */
+ public void setPriorityIds(final String thisPriorityIds) {
+ priorityIds = thisPriorityIds;
}
+
+ /**
+ * Sets the resolutionIds.
+ *
+ * @param thisResolutionIds
+ * The id(s) of the resolution to show, as comma separated string
+ */
+ public void setResolutionIds(final String thisResolutionIds) {
+ resolutionIds = thisResolutionIds;
+ }
+
+ /**
+ * Sets the password for authentication against the webserver.
+ *
+ * @param thisWebPassword
+ * The password of the webserver
+ */
+ public void setWebPassword(final String thisWebPassword) {
+ this.webPassword = thisWebPassword;
+ }
+
+ /**
+ * Sets the username for authentication against the webserver.
+ *
+ * @param thisWebUser
+ * The username of the webserver
+ */
+ public void setWebUser(final String thisWebUser) {
+ this.webUser = thisWebUser;
+ }
+
+ /**
+ * Sets the password to log into a secured JIRA.
+ *
+ * @param thisJiraPassword
+ * The password for JIRA
+ */
+ public void setJiraPassword(final String thisJiraPassword) {
+ this.jiraPassword = thisJiraPassword;
+ }
+
+ /**
+ * Sets the username to log into a secured JIRA.
+ *
+ * @param thisJiraUser
+ * The username for JIRA
+ */
+ public void setJiraUser(final String thisJiraUser) {
+ this.jiraUser = thisJiraUser;
+ }
+
+ /**
+ * Sets the filter to apply to query to JIRA.
+ *
+ * @param thisFilter
+ * The filter to query JIRA
+ */
+ public void setFilter(final String thisFilter) {
+ this.filter = thisFilter;
+ }
+
+ /**
+ * Sets the component(s) to apply to query JIRA.
+ *
+ * @param theseComponents
+ * The id(s) of components to show, as comma separated string
+ */
+ public void setComponent(final String theseComponents) {
+ this.component = theseComponents;
+ }
+
}
diff --git a/jira/src/plugin-resources/jira.jsl b/jira/src/plugin-resources/jira.jsl
index 72adc0b0..327c7262 100644
--- a/jira/src/plugin-resources/jira.jsl
+++ b/jira/src/plugin-resources/jira.jsl
@@ -42,22 +42,30 @@
Key
Summary
- Status
- Resolution
- By
+ Created
+ Priority
+ Status
+ Resolution
+ Assigned to
+ Reported by
+
+
+
${key}
${summary}
+ ${createdate}
+ ${priority}
@@ -82,6 +90,7 @@
${resolution}
${assignee}
+ ${reporter}
diff --git a/jira/xdocs/changes.xml b/jira/xdocs/changes.xml
index 02cbee01..6ca0286f 100644
--- a/jira/xdocs/changes.xml
+++ b/jira/xdocs/changes.xml
@@ -24,6 +24,10 @@
Brett Porter
+
+ Enable retrieving component-specific issues.
+ Authentication support for access a private Jira instalation.
+
Fix jira downloading url for some jira instance like Apache.
diff --git a/jira/xdocs/faq.fml b/jira/xdocs/faq.fml
index 8ad008ce..9418f347 100644
--- a/jira/xdocs/faq.fml
+++ b/jira/xdocs/faq.fml
@@ -35,12 +35,15 @@
<issueTrackingUrl>http://jira.codehaus.org/secure/BrowseProject.jspa?id=10450</issueTrackingUrl>
- 2. make sure that your project allows group Anyone to view jira issues
- (you may or may not need to also set your jira installation type to
- public - this is in General Configuration under administration).
+ 2. Determine the credentials to log into the webserver, if any. The plugin supports basic authentication (and SSL).
+ Add the credentials to the project.properties, as maven.jira.webUser and maven.jira.webPassword
- 3. log out of jira (if you are using Remember me feature) and test your setup
+ 3. Determine the JIRA account to login to the JIRA installation.
+ Add the credentials to the project.properties, as maven.jira.jiraUser and maven.jira.jiraPassword
+
+
+ 4. log out of jira (if you are using Remember me feature) and test your setup
by going to url like this one:
[JIRA URL]/secure/IssueNavigator.jspa?view=rss&pid=[JIRA PROJECT ID]&sorter/field=issuekey&sorter/order=DESC&sorter/field=status&sorter/order=DESC&tempMax=1000&reset=true
@@ -48,13 +51,27 @@
http://jira.codehaus.org/secure/IssueNavigator.jspa?view=rss&pid=10450&sorter/field=issuekey&sorter/order=DESC&sorter/field=status&sorter/order=DESC&tempMax=1000&reset=true
- 4. add this to your project.xml in reports section
+ 5. add this to your project.xml in reports section
<report>maven-jira-plugin</report>
- 5. run site:generate and you should have jira.html in your ${basedir}/target/docs directory
+ 6. run maven site (or just maven maven-jira-plugin:report xdoc) and you should have jira.html in your ${basedir}/target/docs directory
+
+
+
+ My JIRA installation runs SSL with a self signed/home brewn certificate.
+ I get an error message that the certificate is untrusted. How do I proceed?
+
+
+
+ Add the server certificate to your JAVA. You can get the certificate by exporting it from your browser.
+ With IE you click on the certificate info, go to the details TAB and export as .DER by clicking on 'Copy to File...'.
+ Using SUN's keytool you can import the certificate in your 'truststore'. It is located in $JAVA_HOME/jre/lib/security/cacerts
+ Import it using keytool -import -file <servercert>.cer -keystore cacerts
+
+
-
\ No newline at end of file
+
diff --git a/jira/xdocs/goals.xml b/jira/xdocs/goals.xml
index a78c28a6..41dd4bf0 100644
--- a/jira/xdocs/goals.xml
+++ b/jira/xdocs/goals.xml
@@ -25,18 +25,18 @@
maven-jira-plugin:deregister
-
+ The standard goal name for report plugins to register themselves with the site plugin.
maven-jira-plugin:register
-
+ The standard goal name for report plugins to deregister themselves from the site.
maven-jira-plugin:report
- Generate report with all entries defined in Jira.
+ Generate report for entries defined in Jira.
-
\ No newline at end of file
+
diff --git a/jira/xdocs/properties.xml b/jira/xdocs/properties.xml
index c21575eb..24450ce7 100644
--- a/jira/xdocs/properties.xml
+++ b/jira/xdocs/properties.xml
@@ -28,18 +28,143 @@
Property
Optional?
Description
+ Default value
maven.jira.nbentries
Yes
- Defines the number of entries we want to obtain into the report.
- Default value is 1000.
+ Defines the maximum number of issues we want to obtain into the report.
+
+
+
+
+ 1000.
+
+ maven.jira.component
+ Yes
+
+
+ Sets the component(s) of the project you want to limit your report to.
+ Multiple components can be separated by commas (such as 10011,10012).
+
+
+
+
+ empty, meaning all components.
+
+
+
+
+ maven.jira.status
+ Yes
+
+
+ Sets the status(es) of the project you want to limit your report to.
+ Valid statuses are: Open, In Progress, Reopened, Resolved and Closed.
+ Multiple values can be separated by commas.
+
+
+
+
+ Open, In Progress, Reopened
+
+
+
+
+ maven.jira.resolution
+ Yes
+
+
+ Sets the resolution(s) of the project you want to limit your report to.
+ Valid statuses are: Unresolved, Fixed, Won't Fix, Duplicate, Incomplete, Cannot Reproduce.
+ Multiple values can be separated by commas.
+
+
+
+
+ Unresolved
+
+
+
+
+ maven.jira.priority
+ Yes
+
+
+ Sets the priority(s) of the project you want to limit your report to.
+ Valid statuses are: Blocker, Critical, Major, Minor, Trivial.
+ Multiple values can be separated by commas.
+
+
+
+
+ empty, meaning any priority.
+
+
+
+
+ maven.jira.filter
+ Yes
+
+
+ Defines the filter parameters to restrict the result issues from Jira.
+ The filter parameters property must use the same format of url parameters from the Jira search url.
+ Example: status=1&resolution=-1&priority=1&priority=3&priority=4&sorter/field=issuekey&sorter/order=DESC
+
+
+ Note : This string should not contain the parameters pid, tempMax
+ and view.
+ Note : This filter overrides the status, resolution, priority and component properties.
+
+
+
+
+
+ maven.jira.jiraUser
+ Yes
+
+
+ Defines the jira username for authentication into a private Jira instalation.
+
+
+
+
+
+ maven.jira.jiraPassword
+ Yes
+
+
+ Defines the jira password for authentication into a private Jira instalation.
+
+
+
+
+
+ maven.jira.webUser
+ Yes
+
+
+ Defines the http user for basic authentication into the Jira webserver.
+
+
+
+
+
+ maven.jira.webPassword
+ Yes
+
+
+ Defines the http password for basic authentication into the Jira webserver.
+
+
+
+