{"id":68,"date":"2017-03-29T16:52:34","date_gmt":"2017-03-29T08:52:34","guid":{"rendered":"http:\/\/www.jsjs.org\/?p=68"},"modified":"2017-03-29T16:52:34","modified_gmt":"2017-03-29T08:52:34","slug":"using-nexus-3-as-your-repository-part-1-maven-artifacts","status":"publish","type":"post","link":"https:\/\/blog.jsjs.org\/?p=68","title":{"rendered":"Using Nexus 3 as Your Repository \u2013 Part 1: Maven Artifacts"},"content":{"rendered":"<p><em>This article is the first in a three part series by one of our community advocates, Rafael Eyng. You can follow his work at <a href=\"http:\/\/codeheaven.io\/\" target=\"_blank\" rel=\"noopener\">CodeHeaven.io<\/a><\/em><\/p>\n<h1 id=\"installation\">Installation<\/h1>\n<p>Install it with docker:<\/p>\n<div class=\"highlighter-rouge\">\n<pre class=\"highlight\"><code>docker run -d -p 8081:8081 -p 8082:8082 -p 8083:8083 --name my-nexus sonatype\/nexus3:3.0.0\n<\/code><\/pre>\n<\/div>\n<p><small>We are mapping all of those ports (8081-8083) because of the next posts in the series. For this post, we\u2019ll actually only need port 8081.<\/small><\/p>\n<p>Nexus 3 will go up on port 8081. Default credentials are admin\/admin123.<\/p>\n<p>You might want to create a volume to map the Nexus data folder to your host, adding the option <code class=\"highlighter-rouge\">-v \/opt\/my-nexus-data:\/nexus-data<\/code>.<\/p>\n<h1 id=\"configuring-nexus-as-a-maven-repo\">Configuring Nexus as a Maven repo<\/h1>\n<p>What we will do:<br \/>\n\u2013 create a private (hosted) repository for our snapshots<br \/>\n\u2013 create a private (hosted) repository for our releases<br \/>\n\u2013 create a proxy repository pointing to Maven Central<br \/>\n\u2013 create a group repository to provide all of these repos under a single URL<\/p>\n<p>I suggest you to create a new blob store for each new repo you want to create. That way, the data for every repo will be in a different folder in <code class=\"highlighter-rouge\">\/nexus-data<\/code> (inside the Docker container). But this is not mandatory for it to work.<\/p>\n<h2 id=\"snapshots-repo\">snapshots repo<\/h2>\n<p>A repository for Maven artifacts that you deploy <strong>with<\/strong> <code class=\"highlighter-rouge\">-SNAPSHOT<\/code> in the end of the version tag of your pom.xml:<\/p>\n<div class=\"highlighter-rouge\">\n<pre class=\"highlight\"><code>&lt;version&gt;1.0.0-SNAPSHOT&lt;\/version&gt;\n<\/code><\/pre>\n<\/div>\n<p>Create a new maven (hosted) repository and configure it like:<\/p>\n<p><a href=\"http:\/\/www.sonatype.org\/nexus\/content\/uploads\/2017\/02\/using-nexus-as-repository-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-63450\" src=\"http:\/\/www.sonatype.org\/nexus\/content\/uploads\/2017\/02\/using-nexus-as-repository-1.png\" alt=\"using nexus as your repository 1\" width=\"590\" height=\"566\" \/><\/a><\/p>\n<h2 id=\"releases-repo\">releases repo<\/h2>\n<p>A repository for Maven artifact that you deploy <strong>without<\/strong> <code class=\"highlighter-rouge\">-SNAPSHOT<\/code> in the end of the version tag of your pom.xml:<\/p>\n<div class=\"highlighter-rouge\">\n<pre class=\"highlight\"><code>&lt;version&gt;1.0.0&lt;\/version&gt;\n<\/code><\/pre>\n<\/div>\n<p>Create a new maven (hosted) repository and configure it like:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-63451\" src=\"http:\/\/www.sonatype.org\/nexus\/content\/uploads\/2017\/02\/using-nexus-as-repository-2.png\" alt=\"using nexus as your repository 2\" width=\"590\" height=\"574\" \/><\/p>\n<h2 id=\"proxy-to-maven-central-repo\">proxy to Maven Central repo<\/h2>\n<p>A repository that proxies everything you download from Maven Central. Next time you download the same dependency, it will be cached in your Nexus.<\/p>\n<p>Create a new maven (proxy) repository and configure it like:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-63452\" src=\"http:\/\/www.sonatype.org\/nexus\/content\/uploads\/2017\/02\/using-nexus-as-repository-3.png\" alt=\"using nexus as your repository 3\" width=\"590\" height=\"677\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-63464\" src=\"http:\/\/www.sonatype.org\/nexus\/content\/uploads\/2017\/02\/using-nexus-as-repo-5.png\" alt=\"using nexus as your repository\" width=\"667\" height=\"495\" \/><\/p>\n<h2 id=\"group-repo\">group repo<\/h2>\n<p>This will group all the above repos and provide you a single URL to configure your clients to download from\/deploy to.<\/p>\n<p>Create a new maven (group) repository and configure it like:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-63453\" src=\"http:\/\/www.sonatype.org\/nexus\/content\/uploads\/2017\/02\/using-nexus-as-repository-4.png\" alt=\"using nexus as your repository 4\" width=\"590\" height=\"593\" \/><\/p>\n<p>You can create as many repos as you need (like proxies to other public repos) and group them all in the group repo.<\/p>\n<h1 id=\"configuring-your-clients-and-projects-to-use-your-nexus-repos\">Configuring your clients and projects to use your Nexus repos<\/h1>\n<p>Put this in your <code class=\"highlighter-rouge\">~\/.m2\/settings.xml<\/code> file. This will configure the credentials to publish to your hosted repos, and will tell your <code class=\"highlighter-rouge\">mvn<\/code> to use your repo as a mirror of central:<\/p>\n<div class=\"highlighter-rouge\">\n<pre class=\"highlight\"><code><span class=\"cp\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;<\/span>\n<span class=\"nt\">&lt;settings<\/span> <span class=\"na\">xmlns=<\/span><span class=\"s\">\"http:\/\/maven.apache.org\/SETTINGS\/1.1.0\"<\/span>\n  <span class=\"na\">xmlns:xsi=<\/span><span class=\"s\">\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"<\/span>\n  <span class=\"na\">xsi:schemaLocation=<\/span><span class=\"s\">\"http:\/\/maven.apache.org\/SETTINGS\/1.1.0 http:\/\/maven.apache.org\/xsd\/settings-1.1.0.xsd\"<\/span><span class=\"nt\">&gt;<\/span>\n\n  <span class=\"nt\">&lt;servers&gt;<\/span>\n    <span class=\"nt\">&lt;server&gt;<\/span>\n      <span class=\"nt\">&lt;id&gt;<\/span>nexus-snapshots<span class=\"nt\">&lt;\/id&gt;<\/span>\n      <span class=\"nt\">&lt;username&gt;<\/span>admin<span class=\"nt\">&lt;\/username&gt;<\/span>\n      <span class=\"nt\">&lt;password&gt;<\/span>admin123<span class=\"nt\">&lt;\/password&gt;<\/span>\n    <span class=\"nt\">&lt;\/server&gt;<\/span>\n    <span class=\"nt\">&lt;server&gt;<\/span>\n      <span class=\"nt\">&lt;id&gt;<\/span>nexus-releases<span class=\"nt\">&lt;\/id&gt;<\/span>\n      <span class=\"nt\">&lt;username&gt;<\/span>admin<span class=\"nt\">&lt;\/username&gt;<\/span>\n      <span class=\"nt\">&lt;password&gt;<\/span>admin123<span class=\"nt\">&lt;\/password&gt;<\/span>\n    <span class=\"nt\">&lt;\/server&gt;<\/span>\n  <span class=\"nt\">&lt;\/servers&gt;<\/span>\n\n  <span class=\"nt\">&lt;mirrors&gt;<\/span>\n    <span class=\"nt\">&lt;mirror&gt;<\/span>\n      <span class=\"nt\">&lt;id&gt;<\/span>central<span class=\"nt\">&lt;\/id&gt;<\/span>\n      <span class=\"nt\">&lt;name&gt;<\/span>central<span class=\"nt\">&lt;\/name&gt;<\/span>\n      <span class=\"nt\">&lt;url&gt;<\/span>http:\/\/your-host:8081\/repository\/maven-group\/<span class=\"nt\">&lt;\/url&gt;<\/span>\n      <span class=\"nt\">&lt;mirrorOf&gt;<\/span>*<span class=\"nt\">&lt;\/mirrorOf&gt;<\/span>\n    <span class=\"nt\">&lt;\/mirror&gt;<\/span>\n  <span class=\"nt\">&lt;\/mirrors&gt;<\/span>\n\n<span class=\"nt\">&lt;\/settings&gt;<\/span>\n<\/code><\/pre>\n<\/div>\n<p>And now configure your projects.<\/p>\n<p>If you want only to download dependencies from Nexus, put this in the <code class=\"highlighter-rouge\">pom.xml<\/code>:<\/p>\n<div class=\"highlighter-rouge\">\n<pre class=\"highlight\"><code>&lt;project ...&gt;\n\n  ...\n\n  &lt;repositories&gt;\n    &lt;repository&gt;\n      &lt;id&gt;maven-group&lt;\/id&gt;\n      &lt;url&gt;http:\/\/your-host:8081\/repository\/maven-group\/&lt;\/url&gt;\n    &lt;\/repository&gt;\n  &lt;\/repositories&gt;\n&lt;\/project&gt;\n<\/code><\/pre>\n<\/div>\n<p>And if you want also to publish your project, add:<\/p>\n<div class=\"highlighter-rouge\">\n<pre class=\"highlight\"><code>&lt;project ...&gt;\n\n  ...\n\n  &lt;distributionManagement&gt;\n    &lt;snapshotRepository&gt;\n      &lt;id&gt;nexus-snapshots&lt;\/id&gt;\n      &lt;url&gt;http:\/\/your-host:8081\/repository\/maven-snapshots\/&lt;\/url&gt;\n    &lt;\/snapshotRepository&gt;\n    &lt;repository&gt;\n      &lt;id&gt;nexus-releases&lt;\/id&gt;\n      &lt;url&gt;http:\/\/your-host:8081\/repository\/maven-releases\/&lt;\/url&gt;\n    &lt;\/repository&gt;\n  &lt;\/distributionManagement&gt;\n&lt;\/project&gt;\n<\/code><\/pre>\n<\/div>\n<p>Now if you run in your projects:<\/p>\n<div class=\"highlighter-rouge\">\n<pre class=\"highlight\"><code>mvn install\n# or\nmvn deploy\n<\/code><\/pre>\n<\/div>\n<p>your <code class=\"highlighter-rouge\">mvn<\/code> will point to your Nexus instance.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This article is the first in a three part series by one of our community advocates, Rafael Eyng. You can [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-68","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/posts\/68","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=68"}],"version-history":[{"count":0,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/posts\/68\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=68"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=68"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=68"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}