From 2134c137aba32b10e13b8a1a5f1604370700dbb2 Mon Sep 17 00:00:00 2001 From: carlos Date: Fri, 12 Aug 2005 18:57:49 +0000 Subject: [PATCH] Authentication support for access a private Jira instalation. MPJIRA-8 Enable retrieving component-specific issues. MPJIRA-11 MPJIRA-13 git-svn-id: https://svn.apache.org/repos/asf/maven/maven-1/plugins/trunk@232355 13f79535-47bb-0310-9956-ffa450edef68 --- jira/plugin.jelly | 12 +- jira/plugin.properties | 9 + .../org/apache/maven/jira/JiraDownloader.java | 579 +++++++++++++----- jira/src/plugin-resources/jira.jsl | 15 +- jira/xdocs/changes.xml | 4 + jira/xdocs/faq.fml | 31 +- jira/xdocs/goals.xml | 8 +- jira/xdocs/properties.xml | 131 +++- 8 files changed, 625 insertions(+), 164 deletions(-) diff --git a/jira/plugin.jelly b/jira/plugin.jelly index 2ae0ee65..25562eef 100644 --- a/jira/plugin.jelly +++ b/jira/plugin.jelly @@ -54,8 +54,18 @@ project="${pom}" output="${maven.build.dir}/jira/jira-results.xml" nbEntries="${maven.jira.nbentries}" + statusIds="${maven.jira.status}" + filter="${maven.jira.filter}" + resolutionIds="${maven.jira.resolution}" + priorityIds="${maven.jira.priority}" + webUser="${maven.jira.webUser}" + webPassword="${maven.jira.webPassword}" + jiraUser="${maven.jira.jiraUser}" + jiraPassword="${maven.jira.jiraPassword}" + component="${maven.jira.component}" /> + - \ 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. +

+ + + - \ No newline at end of file +