blob: 2b38a9e8e130092680ddf01513f2c2a1ca7c78de [file] [log] [blame]
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.11.1 from src/site/apt/adminguide/webservices/rest.apt.vm
| Rendered using Apache Maven Fluido Skin 1.11.0
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="generator" content="Apache Maven Doxia Site Renderer 1.11.1" />
<meta name="author" content="Olivier Lamy" />
<meta name="date" content="2011-10-05" />
<title>Archiva Documentation &#x2013; Using REST Services</title>
<link rel="stylesheet" href="../../css/apache-maven-fluido-1.11.0.min.css" />
<link rel="stylesheet" href="../../css/site.css" />
<link rel="stylesheet" href="../../css/print.css" media="print" />
<script src="../../js/apache-maven-fluido-1.11.0.min.js"></script>
<!-- Google Analytics -->
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-140879-5', 'auto');
ga('send', 'pageview');
ga('set', 'anonymizeIp', true);
ga('set', 'forceSSL', true);
</script>
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
_paq.push(['disableCookies']);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="https://analytics.apache.org";
_paq.push(['setTrackerUrl', u+'/matomo.php']);
_paq.push(['setSiteId', '10']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'/matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code -->
</head>
<body class="topBarDisabled">
<a href="https://github.com/apache/archiva">
<img style="position: absolute; top: 0; right: 0; border: 0; z-index: 10000;"
src="https://s3.amazonaws.com/github/ribbons/forkme_right_gray_6d6d6d.png"
alt="Fork me on GitHub">
</a>
<div class="container-fluid">
<header>
<div id="banner">
<div class="pull-left"><a href="http://archiva.apache.org/" id="bannerLeft"><img src="http://archiva.apache.org/images/archiva.png" alt="Apache Archiva" style="" /></a></div>
<div class="pull-right"><a href="https://www.apache.org/" id="bannerRight"><img src="https://www.apache.org/images/asf_logo_wide_2016.png" alt="Apache Software Foundation" style="" /></a></div>
<div class="clear"><hr/></div>
</div>
<div id="breadcrumbs">
<ul class="breadcrumb">
<li class=""><a href="https://www.apache.org" class="externalLink" title="Apache">Apache</a><span class="divider">/</span></li>
<li class=""><a href="../../../../index.html" title="Archiva">Archiva</a><span class="divider">/</span></li>
<li class=""><a href="../../index.html" title="Archiva Documentation">Archiva Documentation</a><span class="divider">/</span></li>
<li class="active ">Using REST Services</li>
<li id="publishDate" class="pull-right"><span class="divider">|</span> Last Published: 2022-07-25</li>
<li id="projectVersion" class="pull-right">Version: 3.0.0-SNAPSHOT</li>
</ul>
</div>
</header>
<div class="row-fluid">
<header id="leftColumn" class="span2">
<nav class="well sidebar-nav">
<ul class="nav nav-list">
<li class="nav-header">Introduction</li>
<li><a href="../../quick-start.html" title="Quick Start"><span class="none"></span>Quick Start</a></li>
<li><a href="../../tour/index.html" title="Feature Tour"><span class="none"></span>Feature Tour</a></li>
<li><a href="../../release-notes.html" title="Release Notes"><span class="none"></span>Release Notes</a></li>
<li><a href="../../../../download.html" title="Downloads"><span class="none"></span>Downloads</a></li>
<li class="nav-header">Users Guide</li>
<li><a href="../../userguide/browsing.html" title="Browsing"><span class="none"></span>Browsing</a></li>
<li><a href="../../userguide/searching.html" title="Searching"><span class="none"></span>Searching</a></li>
<li><a href="../../userguide/delete-artifact.html" title="Deleting an Artifact"><span class="none"></span>Deleting an Artifact</a></li>
<li><a href="../../userguide/using-repository.html" title="Using as a repository"><span class="none"></span>Using as a repository</a></li>
<li><a href="../../userguide/deploy.html" title="Deploying to repository"><span class="none"></span>Deploying to repository</a></li>
<li><a href="../../userguide/virtual-repositories.html" title="Configuring Virtual Repositories"><span class="none"></span>Configuring Virtual Repositories</a></li>
<li><a href="../../userguide/rss.html" title="Rss Feeds in Archiva"><span class="none"></span>Rss Feeds in Archiva</a></li>
<li><a href="../../userguide/querying-artifacts.html" title="Querying Artifacts"><span class="none"></span>Querying Artifacts</a></li>
<li class="nav-header">Administrators Guide</li>
<li><a href="../../adminguide/installing.html" title="Installing Archiva"><span class="icon-chevron-right"></span>Installing Archiva</a></li>
<li><a href="../../adminguide/databases.html" title="Databases"><span class="none"></span>Databases</a></li>
<li><a href="../../adminguide/repositories-content-storage.html" title="Repositories Content Storage"><span class="none"></span>Repositories Content Storage</a></li>
<li><a href="../../adminguide/security.html" title="Security"><span class="icon-chevron-right"></span>Security</a></li>
<li><a href="../../adminguide/configuration.html" title="Archiva Configuration"><span class="icon-chevron-right"></span>Archiva Configuration</a></li>
<li class="active"><a><span class="none"></span>REST Apis</a></li>
<li><a href="../../adminguide/configuration-files.html" title="Configuration Files"><span class="none"></span>Configuration Files</a></li>
<li><a href="../../adminguide/system-status.html" title="System Status"><span class="none"></span>System Status</a></li>
<li><a href="../../adminguide/logging.html" title="Log Files"><span class="icon-chevron-right"></span>Log Files</a></li>
<li><a href="../../adminguide/reports.html" title="Reports"><span class="none"></span>Reports</a></li>
<li class="nav-header">Customising Archiva</li>
<li><a href="../../customising/writing-consumer.html" title="Writing a Consumer Plugin"><span class="none"></span>Writing a Consumer Plugin</a></li>
<li class="nav-header">More Information</li>
<li><a href="https://cwiki.apache.org/confluence/display/ARCHIVA/Index" class="externalLink" title="Archiva Wiki"><span class="none"></span>Archiva Wiki</a></li>
<li class="nav-header">ASF</li>
<li><a href="https://www.apache.org/foundation/how-it-works.html" class="externalLink" title="How Apache Works"><span class="none"></span>How Apache Works</a></li>
<li><a href="https://www.apache.org/foundation/" class="externalLink" title="Foundation"><span class="none"></span>Foundation</a></li>
<li><a href="https://www.apache.org/foundation/sponsorship.html" class="externalLink" title="Sponsoring Apache"><span class="none"></span>Sponsoring Apache</a></li>
<li><a href="https://www.apache.org/foundation/thanks.html" class="externalLink" title="Thanks"><span class="none"></span>Thanks</a></li>
<li class="nav-header">Project Documentation</li>
<li><a href="../../project-info.html" title="Project Information"><span class="icon-chevron-right"></span>Project Information</a></li>
</ul>
</nav>
<div class="well sidebar-nav">
<form id="search-form" action="https://www.google.com/search" method="get" >
<input value="https://archiva.apache.org/docs/3.0.0-SNAPSHOT/" name="sitesearch" type="hidden"/>
<input class="search-query" name="q" id="query" type="text" />
</form>
<script>asyncJs( 'https://cse.google.com/brand?form=search-form' )</script>
<div id="poweredBy">
<div class="clear"></div>
<div id="twitter" style="border:none; margin-top: 10px">
<a href="https://twitter.com/archiva" class="twitter-follow-button" data-show-count="false" data-align="left" data-size="medium" data-show-screen-name="true" data-lang="en">Follow archiva</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
</div>
<div class="clear"></div>
<div class="clear"></div>
<a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="../../images/logos/maven-feather.png" /></a>
</div>
</div>
</header>
<main id="bodyColumn" class="span10" >
<section>
<h2><a name="Using_REST_Services"></a>Using REST Services</h2>
<p>Starting version 1.4, you can use some REST Services to manage your Apache Archiva instance and Search artifacts. All samples here will use Apache CXF REST client API. By the way you can use some others REST client frameworks. NOTE: a wadl is available in your Archiva instance : http(s)://ip:port/../restServices/application.wadl</p>
<ul>
<li>Archiva REST api is available here: <a class="externalLink" href="http://archiva.apache.org/docs/3.0.0-SNAPSHOT/rest-docs-archiva-rest-api/index.html">http://archiva.apache.org/docs/3.0.0-SNAPSHOT/rest-docs-archiva-rest-api/index.html</a></li>
<li>Archiva UI REST api is available here: <a class="externalLink" href="http://archiva.apache.org/docs/3.0.0-SNAPSHOT/rest-docs-archiva-ui/index.html">http://archiva.apache.org/docs/3.0.0-SNAPSHOT/rest-docs-archiva-ui/index.html</a></li>
<li>Redback REST api is available here: <a class="externalLink" href="http://archiva.apache.org/docs/3.0.0-SNAPSHOT/rest-docs-redback-rest-api/index.html">http://archiva.apache.org/docs/3.0.0-SNAPSHOT/rest-docs-redback-rest-api/index.html</a></li></ul><section>
<h3><a name="Security_related_information"></a>Security related information</h3>
<p>Starting with version 2.2.2 we added HTTP verification techniques to avoid cross site request forgery attacks. The updating services check Origin and Referer header and use a token provided by the login service. If you use the webservices with a native client that is no browser or want to allow requests from different origin URLs you have to change the configuration. For further information see the <a href="/redback/integration/rest.html">Redback REST documentation</a></p></section><section>
<h3><a name="Search_Service"></a>Search Service</h3>
<p>Authentication headers for connect to your Archiva instance :</p>
<div class="source"><pre class="prettyprint"> // guest with an empty password
public static String guestAuthzHeader =
&quot;Basic &quot; + org.apache.cxf.common.util.Base64Utility.encode( ( &quot;guest&quot; + &quot;:&quot; ).getBytes() );
// with an other login/password
//public String authzHeader =
// &quot;Basic &quot; + org.apache.cxf.common.util.Base64Utility.encode( ( &quot;login&quot; + &quot;:password&quot; ).getBytes() );
</pre></div>
<p>Get a Search Service Client :</p>
<div class="source"><pre class="prettyprint">SearchService service =
JAXRSClientFactory.create( getBaseUrl() + &quot;/&quot; + getRestServicesPath() + &quot;/archivaServices/&quot;,
SearchService.class,
Arrays.asList( new JacksonJaxbJsonProvider( ), new JacksonJaxbXMLProvider( ) ) );
// to add authentification
if ( authzHeader != null )
{
WebClient.client( service ).header( &quot;Authorization&quot;, authzHeader );
}
// Set the Referer header to your archiva server url
WebClient.client(service).header(&quot;Referer&quot;,&quot;http://localhost:&quot;+getServerPort());
// to configure read timeout
WebClient.getConfig( service ).getHttpConduit().getClient().setReceiveTimeout( 100000000 );
// if you want to use json as exchange format xml is supported too
WebClient.client( service ).accept( MediaType.APPLICATION_JSON_TYPE );
WebClient.client( service ).type( MediaType.APPLICATION_JSON_TYPE );
return service;
</pre></div>
<p>Quick Search</p>
<div class="source"><pre class="prettyprint">List&lt;Artifact&gt; artifacts = searchService.quickSearch( &quot;commons-logging&quot; );
// return all artifacts with groupId OR artifactId OR version OR packaging OR className
// NOTE : only artifacts with classifier empty are returned
</pre></div>
<p>Search Artifacts Version : to search all availables version with a groupId and artifactId and packaging (if empty jar is used)</p>
<div class="source"><pre class="prettyprint"> SearchService searchService = getSearchService( authorizationHeader );
List&lt;Artifact&gt; artifacts = searchService.getArtifactVersions( &quot;commons-logging&quot;, &quot;commons-logging&quot;, &quot;jar&quot; );
</pre></div>
<p>Search Service with a classifier :</p>
<div class="source"><pre class="prettyprint"> SearchRequest searchRequest = new SearchRequest();
searchRequest.setGroupId( &quot;commons-logging&quot; );
searchRequest.setArtifactId( &quot;commons-logging&quot; );
searchRequest.setClassifier( &quot;sources&quot; );
List&lt;Artifact&gt; artifacts = searchService.searchArtifacts( searchRequest );
</pre></div>
<p>Search Service with a classifier :</p>
<div class="source"><pre class="prettyprint"> SearchRequest searchRequest = new SearchRequest();
searchRequest.setGroupId( &quot;commons-logging&quot; );
searchRequest.setArtifactId( &quot;commons-logging&quot; );
searchRequest.setClassifier( &quot;sources&quot; );
List&lt;Artifact&gt; artifacts = searchService.searchArtifacts( searchRequest );
</pre></div>
<p>Copy Artifact from a repository to an other one :</p>
<p>For some reasons you want to use a test repository before moving your artifacts to a repository used by final users. To achieve this, you can use a service which can copy an artifact from a repository to an other one</p>
<div class="source"><pre class="prettyprint">// configure the artifact you want to copy
// if package ommited default will be jar
ArtifactTransferRequest artifactTransferRequest = new ArtifactTransferRequest();
artifactTransferRequest.setGroupId( &quot;org.apache.karaf.features&quot; );
artifactTransferRequest.setArtifactId( &quot;org.apache.karaf.features.core&quot; );
artifactTransferRequest.setVersion( &quot;2.2.2&quot; );
artifactTransferRequest.setRepositoryId( SOURCE_REPO_ID );
artifactTransferRequest.setTargetRepositoryId( TARGET_REPO_ID );
// retrieve the service
RepositoriesService repositoriesService = getRepositoriesService( authorizationHeader );
// copy the artifact
Boolean res = repositoriesService.copyArtifact( artifactTransferRequest ).isSuccess();
</pre></div>
<p>To know all the possible options, you can refer to the javadoc of SearchRequest class.</p></section><section>
<h3><a name="Browse_Service"></a>Browse Service</h3>
<p>Get a Browse Service Client :</p>
<div class="source"><pre class="prettyprint"> BrowseService service =
JAXRSClientFactory.create( getBaseUrl() + &quot;/&quot; + getRestServicesPath() + &quot;/archivaServices/&quot;,
BrowseService.class,
Arrays.asList( new JacksonJaxbJsonProvider( ), new JacksonJaxbXMLProvider( ) ) );
// to add authentification
if ( authzHeader != null )
{
WebClient.client( service ).header( &quot;Authorization&quot;, authzHeader );
}
// Set the Referer header to your archiva server url
WebClient.client(service).header(&quot;Referer&quot;,&quot;http://localhost:&quot;+getServerPort());
WebClient.getConfig( service ).getHttpConduit().getClient().setReceiveTimeout( 100000000 );
if ( useXml )
{
WebClient.client( service ).accept( MediaType.APPLICATION_XML_TYPE );
WebClient.client( service ).type( MediaType.APPLICATION_XML_TYPE );
}
else
{
WebClient.client( service ).accept( MediaType.APPLICATION_JSON_TYPE );
WebClient.client( service ).type( MediaType.APPLICATION_JSON_TYPE );
}
return service;
</pre></div>
<p>Get artifacts based on project version metadata, generic metadata added previously in Archiva :</p>
<div class="source"><pre class="prettyprint"> BrowseService browseService = getBrowseService( authorizationHeader, true );
browseService.addMetadata( &quot;commons-cli&quot;, &quot;commons-cli&quot;, &quot;1.0&quot;, &quot;wine&quot;, &quot;bordeaux&quot;, TEST_REPO_ID );
tryAssert( ( ) -&gt; {
List&lt;Artifact&gt; artifactDownloadInfos =
browseService.getArtifactsByProjectVersionMetadata( &quot;wine&quot;, &quot;bordeaux&quot;, TEST_REPO_ID );
assertThat( artifactDownloadInfos ).isNotNull( ).isNotEmpty( ).hasSize( 3 );
</pre></div>
<p>Get artifacts based on the artifact properties :</p>
<div class="source"><pre class="prettyprint"> BrowseService browseService = getBrowseService( authorizationHeader, true );
List&lt;Artifact&gt; artifactDownloadInfos = browseService.getArtifactsByMetadata( &quot;type&quot;, &quot;pom&quot;, TEST_REPO_ID );
assertThat( artifactDownloadInfos ).isNotNull().isNotEmpty().hasSize( 11 );
</pre></div>
<p>Get artifacts based on the project properties from POM :</p>
<div class="source"><pre class="prettyprint"> BrowseService browseService = getBrowseService( authorizationHeader, true );
tryAssert( ( ) -&gt; {
List&lt;Artifact&gt; artifactDownloadInfos =
browseService.getArtifactsByProperty( &quot;org.name&quot;, &quot;The Apache Software Foundation&quot;, TEST_REPO_ID );
assertThat( artifactDownloadInfos ).isNotNull( ).isNotEmpty( ).hasSize( 7 );
</pre></div>
<p>Searching by properties and metadata :</p>
<div class="source"><pre class="prettyprint"> BrowseService browseService = getBrowseService( authorizationHeader, true );
List&lt;Artifact&gt; artifactDownloadInfos =
browseService.searchArtifacts( &quot;org.name&quot;, &quot;The Apache Software Foundation&quot;, TEST_REPO_ID, true );
assertThat( artifactDownloadInfos ).isNotNull().isNotEmpty().hasSize( 7 );
</pre></div>
<div class="source"><pre class="prettyprint"> BrowseService browseService = getBrowseService( authorizationHeader, true );
tryAssert( ( ) -&gt; {
List&lt;Artifact&gt; artifactDownloadInfos =
browseService.searchArtifacts( &quot;The Apache Software Foundation&quot;, TEST_REPO_ID, true );
assertThat( artifactDownloadInfos ).isNotNull( ).isNotEmpty( ).hasSize( 7 );
} );
</pre></div>
<p>Get Search</p>
<div class="source"><pre class="prettyprint">List&lt;Artifact&gt; artifacts = searchService.quickSearch( &quot;commons-logging&quot; );
// return all artifacts with groupId OR artifactId OR version OR packaging OR className
// NOTE : only artifacts with classifier empty are returned
</pre></div>
<p>Dependencies to add in order to use those REST Services</p>
<div class="source"><pre class="prettyprint">
&lt;dependency&gt;
&lt;groupId&gt;com.fasterxml.jackson.core&lt;/groupId&gt;
&lt;artifactId&gt;jackson-core&lt;/artifactId&gt;
&lt;version&gt;${jackson.version}&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;com.fasterxml.jackson.jaxrs&lt;/groupId&gt;
&lt;artifactId&gt;jackson-jaxrs-json-provider&lt;/artifactId&gt;
&lt;version&gt;${jackson.version}&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;com.fasterxml.jackson.jaxrs&lt;/groupId&gt;
&lt;artifactId&gt;jackson-jaxrs-xml-provider&lt;/artifactId&gt;
&lt;version&gt;${jackson.version}&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;com.fasterxml.jackson.core&lt;/groupId&gt;
&lt;artifactId&gt;jackson-annotations&lt;/artifactId&gt;
&lt;version&gt;${jackson.version}&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;com.fasterxml.jackson.dataformat&lt;/groupId&gt;
&lt;artifactId&gt;jackson-dataformat-xml&lt;/artifactId&gt;
&lt;version&gt;${jackson.version}&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;com.fasterxml.jackson.jaxrs&lt;/groupId&gt;
&lt;artifactId&gt;jackson-jaxrs-base&lt;/artifactId&gt;
&lt;version&gt;${jackson.version}&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.apache.cxf&lt;/groupId&gt;
&lt;artifactId&gt;cxf-rt-frontend-jaxrs&lt;/artifactId&gt;
&lt;version&gt;${cxf.version}&lt;/version&gt;
&lt;exclusions&gt;
&lt;exclusion&gt;
&lt;groupId&gt;javax.annotation&lt;/groupId&gt;
&lt;artifactId&gt;javax.annotation-api&lt;/artifactId&gt;
&lt;/exclusion&gt;
&lt;/exclusions&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.apache.cxf&lt;/groupId&gt;
&lt;artifactId&gt;cxf-rt-rs-client&lt;/artifactId&gt;
&lt;version&gt;${cxf.version}&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.apache.cxf&lt;/groupId&gt;
&lt;artifactId&gt;cxf-rt-rs-extension-providers&lt;/artifactId&gt;
&lt;version&gt;${cxf.version}&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.apache.cxf&lt;/groupId&gt;
&lt;artifactId&gt;cxf-rt-features-logging&lt;/artifactId&gt;
&lt;version&gt;${cxf.version}&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.apache.cxf&lt;/groupId&gt;
&lt;artifactId&gt;cxf-rt-rs-service-description-openapi-v3&lt;/artifactId&gt;
&lt;version&gt;${cxf.version}&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;io.swagger.core.v3&lt;/groupId&gt;
&lt;artifactId&gt;swagger-core&lt;/artifactId&gt;
&lt;scope&gt;compile&lt;/scope&gt;
&lt;version&gt;${io.swagger.version}&lt;/version&gt;
&lt;exclusions&gt;
&lt;exclusion&gt;
&lt;groupId&gt;javax.ws.rs&lt;/groupId&gt;
&lt;artifactId&gt;jsr311-api&lt;/artifactId&gt;
&lt;/exclusion&gt;
&lt;/exclusions&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;io.swagger.core.v3&lt;/groupId&gt;
&lt;artifactId&gt;swagger-jaxrs2&lt;/artifactId&gt;
&lt;version&gt;${io.swagger.version}&lt;/version&gt;
&lt;exclusions&gt;
&lt;exclusion&gt;
&lt;groupId&gt;javax.ws.rs&lt;/groupId&gt;
&lt;artifactId&gt;jsr311-api&lt;/artifactId&gt;
&lt;/exclusion&gt;
&lt;/exclusions&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;io.swagger.core.v3&lt;/groupId&gt;
&lt;artifactId&gt;swagger-annotations&lt;/artifactId&gt;
&lt;version&gt;${io.swagger.version}&lt;/version&gt;
&lt;exclusions&gt;
&lt;exclusion&gt;
&lt;groupId&gt;javax.ws.rs&lt;/groupId&gt;
&lt;artifactId&gt;jsr311-api&lt;/artifactId&gt;
&lt;/exclusion&gt;
&lt;/exclusions&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.apache.archiva&lt;/groupId&gt;
&lt;artifactId&gt;archiva-rest-api&lt;/artifactId&gt;
&lt;version&gt;${project.version}&lt;/version&gt;
&lt;/dependency&gt;
</pre></div>
<p>Current versions use in Apache Archiva:</p>
<ul>
<li><code>${project.version}</code>: 3.0.0-SNAPSHOT</li>
<li><code>${cxfVersion}</code>: $<a name="cxf.version">cxf.version</a></li>
<li><code>${jacksonVersion}</code>: $<a name="jacksonVersion">jacksonVersion</a></li></ul></section><section>
<h3><a name="Security_Framework_Services:"></a>Security Framework Services:</h3>
<p>You can use Redback Rest Services to control user creation/modification and add/remove roles.</p>
<p>See <a class="externalLink" href="http://archiva.apache.org/redback/integration/rest.html">http://archiva.apache.org/redback/integration/rest.html</a></p></section></section>
</main>
</div>
</div>
<hr/>
<footer>
<div class="container-fluid">
<div class="row-fluid">
<div class="row">
<div class="span6 offset1">Apache Archiva, Archiva, Apache, the Apache feather logo, and the Apache Archiva project logos are trademarks of The Apache Software Foundation.</div>
</div>
<div class="row">
&nbsp;
</div>
<div class="row">
<div class="span6 offset2">
<p>
<a href="https://archiva.apache.org/docs/3.0.0-SNAPSHOT/privacy-policy.html">Privacy Policy</a>
</p>
</div>
</div>
</div>
</div>
</footer>
<script>
if(anchors) {
anchors.add();
}
</script>
</body>
</html>