I've got maven project with local dependencies, which doesn't compile because this 'improvement', introduced by maven:
Effective January 15, 2020, The Central Repository no longer supports
insecure communication over plain HTTP and requires that all requests
to the repository are encrypted over HTTPS.
Here is my pom.xml:
...
<repositories>
<repository>
<id>in-project</id>
<name>In Project Repo</name>
<url>file://${project.basedir}/libs</url>
</repository>
</repositories>
...
So now I'm receiving the following compile error:
Could not resolve dependencies for project ........:war:1.0: Failed to
collect dependencies for [.........:jar:1.0 (compile),
javax:javaee-web-api:jar:7.0 (provided), .........:jar:1.0
(compile)]: Failed to read artifact descriptor for
.........:jar:1.0: Could not transfer artifact
.........:pom:1.0 from/to central
(http://repo.maven.apache.org/maven2): Failed to transfer file:
http://repo.maven.apache.org/maven2/com/..../..../1.0/.....-1.0.pom.
Return code is: 501 , ReasonPhrase:HTTPS Required. -> [Help 1]
As you can see I'm using local jar file, but this doesn't compile anymore
Does anyone have idea how to configure local repository for successful compilation?
The Maven server do not support HTTP anymore. You must configure the maven repositories with HTTPS url's in your local maven configuration file, in your home folder yourname/.m2/settings.xml.
Here is an example that you may copy:
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd">
<profiles>
<profile>
<id>artifactory</id>
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>libs-release</name>
<url>https://repo1.maven.org/maven2/</url>
</repository>
<repository>
<snapshots />
<id>snapshots</id>
<name>libs-snapshot</name>
<url>https://repo1.maven.org/maven2/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>plugins-release</name>
<url>https://repo1.maven.org/maven2/</url>
</pluginRepository>
<pluginRepository>
<snapshots />
<id>snapshots</id>
<name>plugins-snapshot</name>
<url>https://repo1.maven.org/maven2/</url>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>artifactory</activeProfile>
</activeProfiles>
</settings>
Related
I have two private JFrog repositories setup. One repository handles releases and the other handles snapshots. Here is how I have defined this in my settings.xml file.
<settings>
<activeProfiles>
<activeProfile>default</activeProfile>
</activeProfiles>
<servers>
<server>
<id>central</id>
<username>private-repo-username</username>
<password>private-repo-password</password>
</server>
<server>
<id>snapshots</id>
<username>private-repo-username</username>
<password>private-repo-password</password>
</server>
</servers>
<profiles>
<profile>
<id>default</id>
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>a0d2olsx0t222-artifactory-primary-0-releases</name>
<url>https://my-private-repo.jfrog.io/artifactory/libs-release</url>
</repository>
<repository>
<id>snapshots</id>
<name>a0d2olsx0t222-artifactory-primary-0-snapshots</name>
<url>https://my-private-repo.jfrog.io/artifactory/libs-snapshot</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
</settings>
Multiple of my internal dependencies in my multi-module maven project are getting this error:
[ERROR] Failed to execute goal on project platform-utils: Could not resolve dependencies for project
design.colspalinva:platform-utils:jar:2.2.1-SNAPSHOT: The following artifacts could not be resolved:
com.maxmind.geoip2:geoip2:jar:2.12.0, org.apache.ant:ant:jar:1.10.5: Could not find artifact
com.maxmind.geoip2:geoip2:jar:2.12.0 in central (https://my-private-repo.jfrog.io/artifactory/libs-
release) -> [Help 1]
From the look of it, it doesn't appear that Maven is trying to reach out to the official Maven Central repo for those dependencies, rather failing on my private repository. I was under the impression that if the private repository does not contain the specific artifact, it will attempt to reach out to Maven Central.
It has no problem downloading my Spring dependencies from Maven Central.
If you like to redirect all access of central from Maven to your own repository manager you have to configure the settings.xml as follows:
<! language:language-xml ->
<?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
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://IP:PORT/repository/repo</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>central</id>
<url>http://central</url>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://central</url>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<!--make the profile active all the time -->
<activeProfile>nexus</activeProfile>
</activeProfiles>
</settings>
The Maven settings.xml configuration you shared seems to be OK. You are overriding the built-in central and snapshot repositories of Maven, which is the correct way to make sure that Maven send requests by default to Artifactory.
Adding a Mirror Any setting, as suggested in the other answer, means that in addition to overriding built-in Maven repositories, you can use the Mirror Any setting to redirect all requests to a Maven repository through Artifactory, including those defined inside POMs of plug-ins and third party dependencies.
According to the log you shared Maven does attempt to resolve the artifacts via Artifactory - https://my-private-repo.jfrog.io/artifactory/libs-release
The issue seems to be related to resolution of a specific artifact(s)in Artifactory.
I'm assuming that libs-release is a virtual Maven repository and that it contains at least one remote Maven repository pointing at Jcenter or Maven Central (if not please start by looking at Maven Repositories).
To debug the issue:
(1) Try resolving the artifact directly from Artifactory using cURL or a web browser, for example:
curl -Uuser:pass https://my-private-repo.jfrog.io/artifactory/libs-release/com/maxmind/geoip2/geoip2/2.12.0/geoip2-2.12.0.jar
(2) If you manage to resolve the artifact, it mean that Artifactory is properly configured and Maven should be able to resolve. If not, try looking for the reason performing a trace, for example:
curl -Uuser:pass https://my-private-repo.jfrog.io/artifactory/libs-release/com/maxmind/geoip2/geoip2/2.12.0/geoip2-2.12.0.jar?trace
I'm using Eclipse Kepler and JDK 1.8. I have created a Maven project in eclipse. The in built maven that comes with eclipse has a version 3.0.4. There was an error in creating the maven project saying
"Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin:2.5".
But the folder structure was created. Since the inbuilt maven within eclipse was not able to build it. I downloaded and setup full maven from the maven.apache.org. I verified the same by running the command mvn -v which showed the version of Maven that I have installed i.e. 3.6.
Then I added a java class under Maven_Project_Root/src/main/java. Then tried to build it. Again received the following error:
"Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin:2.5 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-resources-plugin:jar:2.5
Plugin org.apache.maven.plugins:maven-resources-plugin:2.5 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-resources-plugin:jar:2.5"
-It will be much appreciated if somebody can help.
The Maven server do not support HTTP anymore. You must configure the maven repositories with HTTPS url's in your local maven configuration file, in your home folder yourname/.m2/settings.xml.
Here is an example that you may copy:
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd">
<profiles>
<profile>
<id>artifactory</id>
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>libs-release</name>
<url>https://repo1.maven.org/maven2/</url>
</repository>
<repository>
<snapshots />
<id>snapshots</id>
<name>libs-snapshot</name>
<url>https://repo1.maven.org/maven2/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>plugins-release</name>
<url>https://repo1.maven.org/maven2/</url>
</pluginRepository>
<pluginRepository>
<snapshots />
<id>snapshots</id>
<name>plugins-snapshot</name>
<url>https://repo1.maven.org/maven2/</url>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>artifactory</activeProfile>
</activeProfiles>
</settings>
I have the below settings.xml file in my ~/.m2/ folder:
<settings>
<profiles>
<profile>
<id>my-repositories</id>
<repositories>
<repository>
<id>thirdparty-repository</id>
<name>Thirdparty repository</name>
<url>https://mynexus/repository/thirdparty/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>thirdparty-plugin-repository</id>
<name>Thirdparty plugin repository</name>
<url>https://mynexus/repository/thirdparty/</url>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>my-repositories</activeProfile>
</activeProfiles>
</settings>
For both repositories the same nexus group repository is used:
https://mynexus/repository/thirdparty/
If I remove the first one: thirdparty-repository I get the below error:
Failed to read artifact descriptor for junit:junit:jar:4.8.2: Could not transfer artifact junit:junit:pom:4.8.2 from/to central (https://repo.maven.apache.org/maven2): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Now If I re-enable it and instead remove the other one: thirdparty-plugin-repository I now get this error:
Failed to read artifact descriptor for org.apache.maven.plugins:maven-clean-plugin:jar:2.5: Could not transfer artifact org.apache.maven.plugins:maven-clean-plugin:pom:2.5 from/to central (https://repo.maven.apache.org/maven2): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Only when I have them both enabled at the same time it works.
Why do I need both repositories and pluginRepositories that points to the same nexus repository?
Suppose that you had defined a plugin with some dependencies. These dependencies will be searched in all of your <pluginRepository> definitions. Something like this:
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>${liquibase.version}</version>
<dependencies>
<dependency>
<groupId>io.herd.common</groupId>
<artifactId>common-herd</artifactId>
<version>${common.version}</version>
</dependency>
</dependencies>
</plugin>
Even if you have a <repository> defined which contains the common-herd artifact, Maven will not downloaded it unless you also have a <pluginRepository> containing it. And of course, the common-herd artifact can not be present inside the Maven Central Repository.
I had this problem a few months ago and Maven only downloaded the specific plugin dependency after I added a <pluginRepository>
I had a pb like this, idk if it will help but with this code in my POM.xml my nexus pb were resolved
<distributionManagement>
<repository>
<id>nexus</id>
<name>releases</name>
<url>https://mynexus/repository/thirdparty/</url>
</repository>
<snapshotRepository>
<id>nexus</id>
<name>Snapshots</name>
<url>https://mynexus/repository/thirdparty/</url>
</snapshotRepository>
</distributionManagement>
and
<!-- download artifacts from this repo -->
<repositories>
<repository>
<id>nexus</id>
<name>Public</name>
<url>https://mynexus/repository/thirdparty/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
hope it helped
In Nexus there is defined a public group which should contain all needed repositories and there should no need to configure this in your own pom nor in the settings.xml file. Only the public group of Nexus should be configured
The only thing you need is to change the url in mirror with your own location...
<settings>
<mirrors>
<mirror>
<!--This sends everything else to /public -->
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8081/repository/maven-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>
I've started to use JFrog Artifactory 4.14, my maven app needs an ojdbc jar which can be downloaded from oracle repository, which, if I use maven local settings, I'd setted from
http://docs.oracle.com/middleware/1213/core/MAVEN/config_maven_repo.htm#MAVEN9010
Now, using JFrog Artifactory, I've setted remote repo according to
http://buttso.blogspot.lt/2015/02/fronting-oracle-maven-repository-with.html https://www.jfrog.com/blog/fronting-oracle-maven-repository-artifactory/
TEST button says connection successful
I've replaced settings.xml file with the one JFrog Artifactory generated to me
<?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>
<mirrors>
<mirror>
<mirrorOf>*</mirrorOf>
<name>remote-repos</name>
<url>http://docker.k***.l**:8081/artifactory/remote-repos</url>
<id>remote-repos</id>
</mirror>
</mirrors>
<profiles>
<profile>
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>libs-release</name>
<url>http://docker.k***.l**:8081/artifactory/libs-release</url>
</repository>
<repository>
<snapshots />
<id>snapshots</id>
<name>libs-snapshot</name>
<url>http://docker.k***.l**:8081/artifactory/libs-snapshot</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>plugins-release</name>
<url>http://docker.k***.l**:8081/artifactory/plugins-release</url>
</pluginRepository>
<pluginRepository>
<snapshots />
<id>snapshots</id>
<name>plugins-snapshot</name>
<url>http://docker.k***.l**:8081/artifactory/plugins-snapshot</url>
</pluginRepository>
</pluginRepositories>
<id>artifactory</id>
</profile>
</profiles>
<activeProfiles>
<activeProfile>artifactory</activeProfile>
</activeProfiles>
</settings>
I've added to my POM
<distributionManagement>
<repository>
<id>central</id>
<name>e44b4c0db643-releases</name>
<url>http://docker.k***.l**:8081/artifactory/ext-release-local</url>
</repository>
</distributionManagement>
but when I try to run maven command
clean install
I get
The following artifacts could not be resolved: com.oracle.jdbc:ojdbc7:jar:12.1.0.2, com.oracle.jdbc:ucp:jar:12.1.0.2: Could not find artifact com.oracle.jdbc:ojdbc7:jar:12.1.0.2 in remote-repos
You need to define a virtual repository in JFrog. This will be a combination of other repositoies, this is the one you will point at in your settings.xml.
See https://www.jfrog.com/confluence/display/RTF/Virtual+Repositories
I suspect you will also need a proxy element in your settings.xml.
See https://maven.apache.org/guides/mini/guide-proxies.html
As You already have created You new Remote Repository You have to add it to Virtual Repository
choose New (or edit existing one)
and select repositories
that should be it
This question already has answers here:
How to add local jar files to a Maven project?
(36 answers)
Closed 7 years ago.
I have to include fixedformat4j-root dependency in my pom.xml.
I get artifact info (group, version, ...) from the pom.xml of the project homepage:
https://github.com/jeyben/fixedformat4j/blob/master/pom.xml
When I store that info to my pom.xml, I got this error from m2e eclipse plugin:
Missing artifact
com.ancientprogramming.fixedformat4j:fixedformat4j-root:jar:1.4.0-SNAPSHOT
This is my pom.xml
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
...
<dependencies>
...
<dependency>
<groupId>com.ancientprogramming.fixedformat4j</groupId>
<artifactId>fixedformat4j-root</artifactId>
<version>1.4.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>bintray</id>
<url>http://jcenter.bintray.com</url>
</repository>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<releases>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
</pluginRepository>
</pluginRepositories>
<build>
...
</build>
<reporting>
...
</reporting>
</project>
How can I solve this error? Should I set a new repository? Where can I find the repository url from the project pom.xml?
Neither of the repositories you've listed in your POM contain that version of that artifact. They each contain several release versions, but no snapshots.
Looking at the source for this artifact it does appear to be at version 1.4.0-SNAPSHOT but that version has not been deployed to a repository. Either build it yourself locally (via mvn clean install) or reference one of the versions in the given repositories.