Maven configuration through proxy script - java

I need to develop applications here at the company. And inside the company's network there is a *.pac file that determine the destination according to the request.
I'm using git as the version control and maven as the dependency manager, after searching on the internet I've found the following link which helped me configure git to work properly:
Getting git to work with a proxy server
Unfortunately, for Maven I couldn't find a way to make it work.
I've checked the following links but none seemed to work either:
https://www.mkyong.com/maven/how-to-enable-proxy-setting-in-maven/
https://maven.apache.org/guides/mini/guide-proxies.html
Some comments were telling to configure the settings.xml file in the .m2 folder, I configured it like that:
<proxies>
<proxy>
<id>p1</id>
<active>true</active>
<protocol>http</protocol>
<host>hostname</host>
<port>3129</port>
<username>user</username>
<password>password</password>
</proxy>
<proxy>
<id>p2</id>
<active>true</active>
<protocol>https</protocol>
<host>hostname</host>
<port>3443</port>
<username>user</username>
<password>password</password>
</proxy>
</proxies>
Even so it doesn't work.
Has anyone went through this problem, does anyone know how to solve it?

Man, cut this id off and use only http, something like:
<proxy>
<!--<id>optional</id> -->
<active>true</active>
<protocol>http</protocol>
<username>user</username>
<password>passwrod</password>
<host>proxy address without "http://" </host>
<port>proxyport</port>
<nonProxyHosts>*.yourdomain.com</nonProxyHosts>
</proxy>
I put the file setting.xml with this configuration only in my .m2 folder and works like a charm to me.

Related

How to use Jenkins credentials when running `mvn deploy`?

I have a Maven project and want to build it using mvn clean deploy so that the built artifact is deployed into a Nexus repository.
The access data (username and password) for that repository are stored in Jenkins credentials.
I want to call mvn deploy in Jenkins so that the credentials for that Nexus repository are read from Jenkins (not hardcoded in settings.xml).
How can I do it, if I cannot access settings.xml on the Jenkins server?
Update 1:
I created an entry in "Config File Management" (JENKINS_URL/configfiles/index) with following data:
Type: Maven settings.xml
Replace All: Yes
Server ID: myServer
Credentials: Credentials for the Nexus repository
Content:
<?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">
<servers>
<server>
<id>myServer</id>
<username>foo</username>
<password>bar</password>
</server>
</servers>
</settings>
myServer is also used in the pom.xml of the artifact I want to build:
<distributionManagement>
<repository>
<id>myServer</id>
<url>http://nexus.mycompany.com</url>
</repository>
</distributionManagement>
In the configuration of the job, I include those settings as shown below. Nexus settings.xml is the configuration from "Config File Management".
But it does not work -- I get "Forbidden" error when the build attempts to deploy artifacts to Nexus.
Update 2: When I run mvn -X deploy locally with the same credentials as in Jenkins (stored in my local settings.xml), I see following output:
[DEBUG] Failed to decrypt password for server XXX release repository: org.sonatype.plexus.components.sec.dispatcher.SecDispatcherException: java.io.FileNotFoundException: /XXXXXXXXXXXXXXX/.m2/settings-security.xml (No such file or directory)
org.sonatype.plexus.components.sec.dispatcher.SecDispatcherException: org.sonatype.plexus.components.sec.dispatcher.SecDispatcherException: java.io.FileNotFoundException: /XXXXXXXXXXXXXXX/.m2/settings-security.xml (No such file or directory)
at org.sonatype.plexus.components.sec.dispatcher.DefaultSecDispatcher.decrypt(DefaultSecDispatcher.java:121)
at org.apache.maven.settings.crypto.DefaultSettingsDecrypter.decrypt(DefaultSettingsDecrypter.java:107)
at org.apache.maven.settings.crypto.DefaultSettingsDecrypter.decrypt(DefaultSettingsDecrypter.java:63)
at org.apache.maven.internal.aether.DefaultRepositorySystemSessionFactory.newRepositorySession(DefaultRepositorySystemSessionFactory.java:165)
However, the password in settings.xml is not encrypted at all:
<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">
<localRepository/>
<interactiveMode/>
<offline/>
<pluginGroups/>
<servers>
<server>
<id>NEXUS_REPOSITORY_SNAPSHOTS</id>
<username>user</username>
<password>password</password>
</server>
</servers>
<mirrors/>
<proxies/>
<profiles/>
<activeProfiles/>
</settings>
I found a report about similar error here.
You can use the Jenkins config-file-provider plugin ( link: https://plugins.jenkins.io/config-file-provider/ ) to create one or several Maven settings.xml files.
NOTE: Really this helps also if you need differents settings.xml for
different projects.
Then on the maven deploy step of your Jenkins project you can select to point to one of the settings.xml files defined ( instead of pointing to the general Jenkins server /.m2/settings.xml )

Errors in eclipse for maven and alfresco sdk

I am working on a java maven project in eclipse using the m2e plugin. I configured maven plugin with eclipse but some problems occurred.
1.
Alfesco maven sdk link is not working in eclipse its not downloading the required Archetype which is alfresco- amp archtype.
I searched them alot bu I am new to maven and eclipse and, after a day of googling, I still haven't managed to find a solution for this.
Update
Maven Settings are given as follows is there any problem in maven settings. Is there any problem with local repository/catalog then how to change it?
Setttings.xml:
http://maven.apache.org/xsd/settings-1.1.0.xsd">
<proxies>
<proxy>
<active>true</active>
<protocol>http</protocol>
<host>172.16.0.9</host>
<port>8080</port>
</proxy>
</proxies>
</settings>

Eclipse fails to update Maven index while behind company proxy

Eclipse Mars m2e plugin fails to download repository index updates on startup. I run Eclipse behind a company firewall but the proxy settings work fine for "check for updates", "eclipse marketplace", and eclipse's built-in browser.
I have tried the following:
Deleting the cache directory \eclipse\p2\org.eclipse.equinox.p2.repository\cache and then refreshing the repositories. Preferences -> Install Update -> Available Software Sites => select the entry and click "Reload"
Adding -Djava.net.preferIPv4Stack=true to -vmargs in eclipse.ini
Edit: Proxy configurations are correctly set in $HOME/.m2/settings.xml
Edit: Seems like a bug. So I raised a bug request with eclipse.org. You can view it here
Due to this issue, eclipse fails to search and add dependency from maven repositories.
Here is the error in .metadata/.log
eclipse.buildId=4.5.0.I20150603-2000
java.version=1.8.0_60
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_IN
Framework arguments: -product org.eclipse.epp.package.jee.product
Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product
!ENTRY org.eclipse.m2e.logback.appender 4 0 2015-09-30 14:39:59.820
!MESSAGE Unable to update index for central|https://repo.maven.apache.org/maven2
!STACK 0
java.net.ConnectException: Connection timed out: connect
at java.net.TwoStacksPlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at com.squareup.okhttp.internal.Platform.connectSocket(Platform.java:107)
at com.squareup.okhttp.Connection.connect(Connection.java:156)
at com.squareup.okhttp.Connection.connectAndSetOwner(Connection.java:175)
at com.squareup.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:120)
at com.squareup.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:330)
at com.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:319)
at com.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:241)
at com.squareup.okhttp.Call.getResponse(Call.java:271)
at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:228)
at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:199)
at com.squareup.okhttp.Call.execute(Call.java:79)
at io.takari.aether.okhttp.OkHttpAetherClient.execute(OkHttpAetherClient.java:154)
at io.takari.aether.okhttp.OkHttpAetherClient.get(OkHttpAetherClient.java:100)
at org.eclipse.m2e.core.internal.index.nexus.AetherClientResourceFetcher.retrieve(AetherClientResourceFetcher.java:79)
at org.apache.maven.index.updater.AbstractResourceFetcher.retrieve(AbstractResourceFetcher.java:35)
at org.apache.maven.index.updater.DefaultIndexUpdater.downloadIndexProperties(DefaultIndexUpdater.java:452)
at org.apache.maven.index.updater.DefaultIndexUpdater.access$100(DefaultIndexUpdater.java:75)
at org.apache.maven.index.updater.DefaultIndexUpdater$IndexAdaptor.setProperties(DefaultIndexUpdater.java:607)
at org.apache.maven.index.updater.DefaultIndexUpdater.fetchAndUpdateIndex(DefaultIndexUpdater.java:788)
at org.apache.maven.index.updater.DefaultIndexUpdater.fetchAndUpdateIndex(DefaultIndexUpdater.java:135)
at org.eclipse.m2e.core.internal.index.nexus.NexusIndexManager.updateRemoteIndex(NexusIndexManager.java:1127)
at org.eclipse.m2e.core.internal.index.nexus.NexusIndexManager.updateIndex(NexusIndexManager.java:1084)
at org.eclipse.m2e.core.internal.index.nexus.NexusIndexManager$1.run(NexusIndexManager.java:656)
at org.eclipse.m2e.core.internal.index.nexus.IndexUpdaterJob.run(IndexUpdaterJob.java:72)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
I've found solution. It's quite simple. After some code investigation I've found following thing:
https://github.com/eclipse/m2e-core/blob/releases/1.6/1.6.2.20150902-0002/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/embedder/MavenImpl.java#L1226
So m2e scans proxy list and trying to find correct by protocol. If you look at central url: https://repo.maven.apache.org/maven2. It's starts from "https".
Your proxy settings should looks like that (one proxy for http and second for https):
<proxies>
<proxy>
<active>true</active>
<protocol>http</protocol>
<host>myproxy.company.com</host>
<port>8080</port>
</proxy>
<proxy>
<active>true</active>
<protocol>https</protocol>
<host>myproxy.company.com</host>
<port>8080</port>
</proxy>
</proxies>
Although you have configured proxy in eclispe, you have to do the same config for maven, into settinggs.xml file. Here you have my proxy configuration section:
<proxies>
<proxy>
<active>true</active>
<protocol>http</protocol>
<host>myproxy.company.com</host>
<port>8080</port>
</proxy>
</proxies>
Then you have to ensure in eclipse that you are using the configured settings.xml file, in window->preferences-maven->user settings.
Hope it helps.
Maven uses its own proxy settings, defined in .m2/settings.xml. You can find the settings used my m2e plugin in Eclipse's menu: Windows / Preferences / Maven / User Settings. Remember to hit the Update Settings -button after editing:
<!-- proxies
| This is a list of proxies which can be used on this machine to connect to the network.
| Unless otherwise specified (by system property or command-line switch), the first proxy
| specification in this list marked as active will be used.
|-->
<proxies>
<!-- proxy
| Specification for one proxy, to be used in connecting to the network.
|
<proxy>
<id>optional</id>
<active>true</active>
<protocol>http</protocol>
<username>proxyuser</username>
<password>proxypass</password>
<host>proxy.host.net</host>
<port>80</port>
<nonProxyHosts>local.net|some.host.com</nonProxyHosts>
</proxy>
-->
</proxies>

Maven project error in eclipse Java EE

I Created a Maven project following this tutorial, and it worked properly. Now when I create a Maven project again, it gives the following error.
Could anyone help me to solve this issue?
I found same error and resolved using this question of StackOverflow
solution-1 (please follow this link for further assistance)
By following below steps
Open Window > Preferences
Open Maven > Archetypes
Click 'Add Remote Catalog' and add the
following:
Catalog File: http://repo1.maven.org/maven2/archetype-catalog.xml
Description: maven catalog
Maven > User Setting > c:\Users\xxxxxxxx.m2\settings.xml
If you are a proxy, you need this configuration:
<proxies>
<!-- proxy
| Specification for one proxy, to be used in connecting to the network.
| -->
<proxy>
<id>optional</id>
<active>true</active>
<protocol>http</protocol>
<username>******</username>
<password>*******</password>
<host>*****proxy_host*****</host>
<port>8080</port>
</proxy>
</proxies>

Robolectric unable to get resource

When I'm trying to use Robolectric I got following errors (I can't paste more, because I'm new here). How can I solve it?
Downloading: org/robolectric/android-all/4.3_r2-robolectric-0/android-all-4.3_r2-robolectric-0.pom from repository central at
http://repo1.maven.org/maven2
[WARNING] Unable to get resource 'org.robolectric:android-all:pom:4.3_r2-robolectric-0' from repository sonatype
https://oss.sonatype.org/content/groups/public/
Error transferring file: Connection refused: connect
UPDATE:
I solved my problem. Using proxy caused that.
You should write correct proxy settings for maven.
Create settings.xml file in your ~/.m2 directory
<settings>
<proxies>
<proxy>
<active>true</active>
<protocol>http</protocol>
<host></host>
<port></port>
<username></username>
<password></password>
</proxy>
</proxies>
</settings>
You can read additional info here https://maven.apache.org/guides/mini/guide-proxies.html

Categories