|
|
Line 1: |
Line 1: |
− | {{note||This page provides information how to publish a Java project to the Nexus repository instance running at [https://repo.eclipse.org repo.eclipse.org]. Readers are expected to be familiar with Maven concepts and Maven repository publishing. If this is not the case, we strongly suggest readers to first read the basics from [https://help.sonatype.com/repomanager2/concepts/an-example---maven-repository-format Sonatype's documentation] and the [https://maven.apache.org/plugins/maven-deploy-plugin/deploy-mojo.html Apache Maven Deploy plugin].}}
| + | == This page has been moved to https://github.com/eclipse-cbi/cbi/wiki/Nexus == |
− | | + | |
− | == Eclipse Nexus Instance ==
| + | |
− | | + | |
− | The Eclipse Nexus instance is hosted at: https://repo.eclipse.org
| + | |
− | | + | |
− | This repository allows Eclipse projects to publish their build artifacts into a centralized repository hosted by EMO.
| + | |
− | | + | |
− | Notes:
| + | |
− | | + | |
− | * Snapshots older than 7-days are automatically removed on a weekly basis with the minimum of 1 snapshot being retained.
| + | |
− | * All snapshots for a given GAV are automatically removed 14 days after release.
| + | |
− | * All snapshots not being no requested in the last 360 days will be automatically removed.
| + | |
− | | + | |
− | === Getting a Nexus repository for your Project ===
| + | |
− | | + | |
− | [https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/issues File a ticket] and specify what project you'd like a Nexus repo for.
| + | |
− | | + | |
− | 3 repositories are typically created:
| + | |
− | | + | |
− | * group (``https://repo.eclipse.org/content/repositories/<projectname>/``), which groups both releases and snapshots repositories.
| + | |
− | * releases: ``https://repo.eclipse.org/content/repositories/<projectname>-releases/``, for publishing releases. Re-deploy is '''disabled'''.
| + | |
− | * snapshots: ``https://repo.eclipse.org/content/repositories/<projectname>-snapshots/``, for publishing snaphosts. Re-deploy is '''enabled'''.
| + | |
− | | + | |
− | Projects can only publish to these repositories from their [[Jenkins|Jenkins instance]]. Committers cannot do anything administrative on the instance.
| + | |
− | | + | |
− | == Pulling artifacts from Nexus == | + | |
− | | + | |
− | To use repo.eclipse.org to pull artifacts for your project there are a few URLs that can be used.
| + | |
− | | + | |
− | === Releases Group ===
| + | |
− | | + | |
− | https://repo.eclipse.org/content/repositories/releases/
| + | |
− | | + | |
− | This URL is a top-level aggregate of all project releases repositories. This URL is recommended if you just want to pull in releases from any project hosting artifacts on repo.eclipse.org
| + | |
− | | + | |
− | === Snapshots Group ===
| + | |
− | | + | |
− | https://repo.eclipse.org/content/repositories/snapshots/
| + | |
− | | + | |
− | This URL is a top-level aggregate of all project snapshots repositories. This URL is useful for developers who want to pull in artifacts that may have not yet been released usually nightlies.
| + | |
− | | + | |
− | === Project Specific Repos ===
| + | |
− | | + | |
− | Finally you can also use a project specific repo if you only want to ensure you are only pulling artifacts from specific projects. To get the URLs for these projects you can navigate to https://repo.eclipse.org/index.html#view-repositories and browse for the URL link for the specific project.
| + | |
− | == Deploying artifacts to repo.eclipse.org ==
| + | |
− | | + | |
− | To deploy artifacts to repo.eclipse.org you will need to use Jenkins (http://ci.eclipse.org) to configure a job for deploying your artifacts.
| + | |
− | | + | |
− | It is recommended that you use '''JDK 8''' or higher as we have seen SSL Handshake issues when using JDK 7 and lower.
| + | |
− | | + | |
− | === Initial Maven POM setup ===
| + | |
− | | + | |
− | Before Jenkins can deploy your project's artifacts to Nexus you will need to do some setup on the Maven side to add a [http://maven.apache.org/pom.html#Distribution_Management "distributionManagement"] section to your project pom. An example below:
| + | |
− | | + | |
− | <pre>
| + | |
− | <distributionManagement>
| + | |
− | <repository>
| + | |
− | <id>repo.eclipse.org</id>
| + | |
− | <name>Project Repository - Releases</name>
| + | |
− | <url>https://repo.eclipse.org/content/repositories/project-releases/</url>
| + | |
− | </repository>
| + | |
− | <snapshotRepository>
| + | |
− | <id>repo.eclipse.org</id>
| + | |
− | <name>Project Repository - Snapshots</name>
| + | |
− | <url>https://repo.eclipse.org/content/repositories/project-snapshots/</url>
| + | |
− | </snapshotRepository>
| + | |
− | </distributionManagement>
| + | |
− | </pre>
| + | |
− | | + | |
− | Replace instances of the word "project" with your project's name.
| + | |
− | | + | |
− | Note: It is important to ensure your ID's are "repo.eclipse.org" as the Jenkins instance is configured to use these IDs.
| + | |
− | | + | |
− | If you want to keep several snapshot versions use:
| + | |
− | <pre>
| + | |
− | <snapshotRepository>
| + | |
− | <uniqueVersion>true</uniqueVersion>
| + | |
− | ...
| + | |
− | </pre>
| + | |
− | | + | |
− | Note: this tag is [https://cwiki.apache.org/confluence/display/MAVEN/Maven+3.x+Compatibility+Notes#Maven3.xCompatibilityNotes-Non-uniqueSnapshotDeployments ignored by Maven 3.x].
| + | |
− | | + | |
− | === Jenkins Job Setup ===
| + | |
− | | + | |
− | Using Jenkins you will need to configure Maven to run the "deploy" goal.
| + | |
− | | + | |
− | Use the "deploy" goal as one of your Maven goals as part of your build. Be careful while doing that to not specify duplicate goals (e.g., <code>mvn verify deploy</code> will execute all phases up to <code>verify</code> twice).
| + | |
− | | + | |
− | == Deploying a jar to repo.eclipse.org ==
| + | |
− | | + | |
− | It is possible to use the Maven '''deploy:deploy-file''' goal to push a jar file into https://repo.eclipse.org via Jenkins. For every jar you wish to push into https://repo.eclipse.orgrepo.eclipse.org an associating pom.xml file is necessary.
| + | |
− | | + | |
− | The simplest pom.xml can be as follows:
| + | |
− | | + | |
− | <pre>
| + | |
− | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
| + | |
− | <modelVersion>4.0.0</modelVersion>
| + | |
− | <groupId>org.eclipse.jdt</groupId>
| + | |
− | <artifactId>org.eclipse.jdt.core</artifactId>
| + | |
− | <version>3.9.0.v20130313-2254</version>
| + | |
− | </project>
| + | |
− | </pre>
| + | |
− | === Configuring Jenkins for mvn deploy:deploy-file ===
| + | |
− | | + | |
− | There are 3 settings which need to be configured:
| + | |
− | | + | |
− | # Goals: deploy:deploy-file
| + | |
− | # Properties:
| + | |
− | #:<pre>
| + | |
− | #::groupId=<groupId>
| + | |
− | #::artifactId=<artifactId>
| + | |
− | #::version=<version>
| + | |
− | #::packaging=jar
| + | |
− | #::file=/shared/path/to/file.jar
| + | |
− | #::repositoryId=repo.eclipse.org
| + | |
− | #::url=<Your project's repo URL to push jar into>
| + | |
− | #:</pre>
| + | |
− | # POM File: /path/to/pom.xml
| + | |
− | | + | |
− | For example:
| + | |
− | [[Image:mvn-deploy-file.png]]
| + | |
− | | + | |
− | | + | |
− | Note: You will also need to configure your settings file to use '''Deploy to repo.eclipse.org''' per instructions in the previous section for deploying artifacts.
| + | |
− | | + | |
− | == Deploying to repo.eclipse.org with Gradle ==
| + | |
− | | + | |
− | If you are using Gradle in your build job, you can also deploy to '''repo.eclipse.org''' from your JIPP instance as described in the [https://docs.gradle.org/current/userguide/maven_plugin.html#uploading_to_maven_repositories Gradle user guide].
| + | |
− | | + | |
− | Include in your gradle script authentication configuration using the settings below, e.g.
| + | |
− | <pre>
| + | |
− | repositories {
| + | |
− | maven {
| + | |
− | credentials {
| + | |
− | username eclipseRepoUsername
| + | |
− | password eclipseRepoPassword
| + | |
− | }
| + | |
− | authentication {
| + | |
− | basic(BasicAuthentication)
| + | |
− | }
| + | |
− | }
| + | |
− | }
| + | |
− | </pre>
| + | |
− | | + | |
− | Webmaster will need to setup the Gradle plugin in your JIPP and provide '''~/.gradle/gradle.properties''' with the following two variables:
| + | |
− | <pre>
| + | |
− | eclipseRepoUsername=xxx
| + | |
− | eclipseRepoPassword=yyy
| + | |
− | </pre>
| + | |
− | | + | |
− | Please [https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/issues file a ticket] for that.
| + | |