How to cache artifact from a public repository(e.g., Maven Central) to a private-owned nexus repository? - eclipse

Basically, I am asking the same thing as the question linked here.
However, I don't think the picked answer solved the question. In addition, the former one was asked years ago.
The Nexus OSS version I installed is 2.11.2-06(the latest version).
I CAN cache an artifact if I search with the nexus GUI and click download button.
However, an artifact IS NOT cached if I declare it in the pom file in eclipse. It will just fetch it from MAVEN CENTRAL and cache it locally in my computer but not in the Nexus Repository.
I WISH when I declare a dependency in the POM file in eclipse, if it is not cached locally, maven will fetch it from MAVEN CENTRAL, cache it both locally in my computer AND in the Nexus Repository as well.
My maven settings.xml is shown below:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<profiles>
<profile>
<id>kingstar-internal</id>
<repositories>
<repository>
<id>kingstar-internal-repository</id>
<name>Kingstar Internal Repository</name>
<url>http://localhost:8081/nexus/content/repositories/KingstarRepository</url>
</repository>
<repository>
<id>kingstar-snapshot-repository</id>
<name>Kingstar Snapshot Repository</name>
<url>http://localhost:8081/nexus/content/repositories/KingstarSnapshotRepository</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
<mirrors>
<mirror>
<id>public-mirror</id>
<mirrorOf>*</mirrorOf>
<name>public mirror</name>
<url>http://localhost:8081/nexus/content/groups/public/</url>
</mirror>
</mirrors>
<activeProfiles>
<activeProfile>kingstar-internal</activeProfile>
</activeProfiles>
<servers>
<server>
<id>kingstar-internal-repository</id>
<username>deployment</username>
<password>deployment</password>
</server>
<server>
<id>kingstar-snapshot-repository</id>
<username>deployment</username>
<password>deployment</password>
</server>
</servers>
</settings>
Any help is appreciated!

Related

Artifacts are "missing" when using Artifactory

I have an Eclipse project that I am trying to build using Maven, with JAR files that reside on my private Artifactory server and
a few other Maven repositories.
In my POM file (prior to adding my Artifactory repository) I had the repositories specified:
<repositories>
<repository>
<id>third-party</id>
<name>Atlassian 3rdParty</name>
<url>https://repo.spring.io/plugins-release/</url>
</repository>
<repository>
<id>ICM</id>
<name>ICM Repository</name>
<url>http://maven.icm.edu.pl/artifactory/repo/</url>
</repository>
</repositories>
The repositories enable me to access several libraries that I need for the build, including (but not exclusively):
...
<dependency>
<groupId>xerces</groupId>
<artifactId>xerces</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.3</version>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
</dependency>
...
I have a couple of JAR files that I would like to access from my Artifactory server. These files are in a repository I created called
Factor_Snapshot, and there are two of them: factorbase-1.0.0.jar and lowerbase-1.0.0.jar.
In order to get everything through Artifactory (properly using it as a proxy for the remore repositories, I added those repositories to Artifactory. I then used the "set me up" link in an attempt to generate proper entries for the POM file.
One thing I noticed was that I cannot seem to get the generated entries to include the Factor_Snapshot repository. generated entries only seem to include the libs-release and libs-snapshot repos that were there before. When I click on Generate Maven Settings and select a snapshot, I am only allowed to select libs-snapshot, gradle-dev, libs-release, etc. My snapshot repo, Factor_Snapshot, cannot be selected. The generated settings are shown below:
<?xml version="1.0" encoding="UTF-8"?>
<settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<servers>
<server>
<username>${security.getCurrentUsername()}</username>
<password>${security.getEscapedEncryptedPassword()!"*** Insert encrypted password here ***"}</password>
<id>central</id>
</server>
<server>
<username>${security.getCurrentUsername()}</username>
<password>${security.getEscapedEncryptedPassword()!"*** Insert encrypted password here ***"}</password>
<id>snapshots</id>
</server>
</servers>
<profiles>
<profile>
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>libs-release</name>
<url>http://192,168.1.230:8081/artifactory/libs-release</url>
</repository>
<repository>
<snapshots />
<id>snapshots</id>
<name>libs-snapshot</name>
<url>http://192,168.1.230:8081/artifactory/libs-snapshot</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>libs-release</name>
<url>http://192,168.1.230:8081/artifactory/libs-release</url>
</pluginRepository>
<pluginRepository>
<snapshots />
<id>snapshots</id>
<name>libs-snapshot</name>
<url>http://192,168.1.230:8081/artifactory/libs-snapshot</url>
</pluginRepository>
</pluginRepositories>
<id>artifactory</id>
</profile>
</profiles>
<activeProfiles>
<activeProfile>artifactory</activeProfile>
</activeProfiles>
</settings>
Of course, since there doesn't seem to be a settings.xml file for putting in active profiles in Eclipse, I doubted that I could use this file
anyway. Also: it is unclear how to get the encrypted passwords referenced in the file.
I added the following dependencies, based on how I saw them organized on my Artifactory server:
...
<dependency>
<groupId>com.factor3</groupId>
<artifactId>lowerbase</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.factor3</groupId>
<artifactId>factorbase</artifactId>
<version>1.0.0</version>
</dependency>
...
I believe I set them up correctly. I did get error messages once I saved the POM file saying that the artifacts lowerbase:jar and factorbase:jar were missing. This was expected because I hadn't put in the repository declaration yet.
I did end up guessing about the repo declaration, so I created the following entries in my POM file, based on Artifactory documentation and the way the repo was set up:
<repositories>
<repository>
<id>snapshots</id>
<name>soliandisk</name>
<url>http://192,168.1.230:8081/artifactory/Factor_Snapshot</url>
</repository>
<repository>
<id>third-party</id>
<name>Atlassian 3rdParty</name>
<url>https://repo.spring.io/plugins-release/</url>
</repository>
<repository>
<id>ICM</id>
<name>ICM Repository</name>
<url>http://maven.icm.edu.pl/artifactory/repo/</url>
</repository>
</repositories>
But when I added the Factor_Snapshot repository, now I get failures saying all the JAR file artifacts are missing -- even the factorbase and lowerbase artifacts!
I know I am missing something in the configuration, but I don't know what.
How do I configure Artifactory and my POM file so I can get all my necessary JARs?
Your URL, http://192,168.1.230:8081, contains a comma , instead of a period ..

m2eclipse not showing latest artifacts in search

I am using Eclipse with the m2eclipse plugin and have setup a nexus repository mirror. When I search for artifacts it does not show the most recent versions; sometimes it shows very outdated versions of artifacts. I usually end up searching online for the latest version. Do I have something configured incorrectly, or is this a bug? I am currently on Eclipse Kepler, but this also happened in the Juno version.
For example, I tried adding the groovy dependency, which is currently on version 2.1.6. The latest (non-beta) shown is 1.8.1:
I don't think it has anything to do with Nexus. I can view my nexus repository in the Maven Repositories view in Eclipse. Also, if I manually type in the latest version there are not errors, so the JAR file(s) are pulled in correctly.
Here is my local settings.xml referencing the Nexus mirror:
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<pluginGroups>
</pluginGroups>
<proxies>
</proxies>
<servers>
<server>
<id>nexus</id>
<username>deployment</username>
<password>mypassword</password>
</server>
</servers>
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>central</mirrorOf>
<url>http://myserver/nexus/content/groups/public</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
This is most probably a problem with downloading the index files from Nexus.
Make sure you can find the latest version of the dependency when searching in the Nexus web UI. If this doesn't work, then Nexus fails to download the indexes from the upstream sites. Check for errors in the logs and manually trigger the download.
If the search on your Nexus works, make sure m2e can download the indexes when you start Eclipse. Look in the progress view when you start Eclipse; it should tell you that it downloads the indexes from Nexus.
You can also have a look at the Maven Console (in your console view; enable DEBUG to see more) right after starting Eclipse.
Lastly, you can start Eclipse with java instead of javaw. It will then print some debug information to a console/terminal window.

Why do I see a heavily reduced public JBoss Maven repository in Eclipse?

As you can see in the picture at the end of this post only a few artifacts are available from the JBoss repository in Eclipse. But if you browse it online at https://repository.jboss.org/nexus/index.html#view-repositories;public-jboss~browsestorage there are hundreds. I have rebuilt and updated the index several times. I have checked "Full Index Enabled". I have changed the repository URL from https to http and back. I have searched the web of course but can't fix it. I'm not behind a proxy.
Here is some version information:
Ubuntu 10.10
Eclipse Indigo 3.7.2
Maven 3.0.4
The Maven central repository hosted at Apache is working fine, but the JBoss repository isn't. I have configured Maven with the settings.xml in my ~/.m2/ directory. Whenever I made changes, I have reloaded the settings.xml.
This is my settings.xml
<settings xmlns="http://maven.apache.org/settings/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<profiles>
<profile>
<id>jboss-public-repository</id>
<repositories>
<repository>
<id>jboss-public-repository-group</id>
<name>JBoss Public Maven Repository Group</name>
<url>http://repository.jboss.org/nexus/content/groups/public-jboss/</url>
<layout>default</layout>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>jboss-public-repository-group</id>
<name>JBoss Public Maven Repository Group</name>
<url>http://repository.jboss.org/nexus/content/groups/public-jboss/</url>
<layout>default</layout>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>jboss-public-repository</activeProfile>
</activeProfiles>
</settings>
The Maven Repository Browser looks like this
Maven Repository Browser with very few artifacts in the JBoss repository

How to upload maven plugin to Nexus repository?

I want to upload my custom maven plugin to nexus repository.
My problem is that when I upload my plugin to nexus via web IU like ordinary dependency, maven can't find it:
Plugin com.huawei:maven-project-version-plugin:1.0 or one of its
dependencies could not be resolved: Failed to read artifact descriptor
for com.huawei:maven-project-version-plugin:jar:1.0: Failure to find
com.mycompany:maven-project-version-plugin:pom:1.0 in
http://localhost:8081/nexus/content/groups/public was cached in the
local repository, resolution will not be reattempted until the update
interval of nexus has elapsed or updates are forced -> [Help 1]
But when I am install my plugin to maven local repositiry (not nexus) via command line all is fine.
So, what is the difference between installing custom maven plugin and installing "non plugin" artefacts? Are there any tricks?
My settings.xml:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<!--This sends everything else to /public -->
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8081/nexus/content/groups/public</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<!--Enable snapshots for the built in central repo to direct -->
<!--all requests to nexus via the mirror -->
<repositories>
<repository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<!--make the profile active all the time -->
<activeProfile>nexus</activeProfile>
</activeProfiles>
</settings>
The problem was solved. Well, I don't know how, but today all is work. I think the problem was in Nexus cache. I just deleted my hosted repository and created it again. Perhaps, there are less radical methods, but I don't know them =) Delete artifact and then just "expire cache" not help in my case.
Well, the answer of my question: There is no any different between installation plugin and non plugin artifact in Nexus, except one. If you select GAV Definition: GAV parameters, you must select "maven-plugin" in combobox "Packaging".
I think there is no need to write step by step instruction, it is very simple. Just select your hosted repository -> Artifact Upload tab and fill required fields.
Also to add that you must also upload the pom of your Maven plugin. If you don't Nexus will auto generate one which is not correct. i.e. it will just be a basic pom consisting of version, artifactID, packaging, and groupID.

How to connect to the internal maven repository?

In our company we have an internal maven repository. The IDE used is eclipse.
The link to the internal maven repository is http://machinename:8080/artifactory
Can someone please help me how to connect to this internal maven repository and also what all changes are to be made on the eclipse to use this?
You need to update your Maven settings.xml file to use the internal Artifactory repo, instead of the global maven repository.
In Eclipse go to Window > Preferences > Maven > User Settings and edit the settings.xml file to contain your repository. e.g.
<profile>
<id>profile_name_here</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<id>profile_id_here</id>
<name>artifactory</name>
<url>http://machinename:8080/artifactory</url>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
</repository>
</repositories>
</profile>