Maven ja Artifactory

Mavenin kanssa peuhatessa tuli mieleen halu pystyttää oma repository Mavenille. Tähän on monia syitä.

Oma repository toimii kätevästi proxynä julkisille repositoryille: kun lataat sen kautta pluginit, ne täytyy ladata vain kerran, ja sitten ne löytyvät läheltä paikallisesti, vaikka koko tiimille tai yritykselle. Kun internet on epävarma nykyisellään aika ajoin, ja kun maven central repositoryt kuten repo1 ovat ylikuormitettuja, tämä voi pelastaa päiväsi.

Toinen syy on tietysti että on mukavaa kun maveniä käyttäessä on julkaisuja varten oma tiimirepository, jossa valmiita snapshot ja muita releaseja voi jaella. Voittaa levynnurkan!

Vertaillessa eri vaihtoehtoja esiin nousi selkeästi kova repository nimeltä Artifactory – sitä löytyy tuen kera kaupallisena, ja avoimen lähdekoodin community editiona. Asennus on helppo: lataat zipin, purat sen haluamaasi paikkaan, ja ajat bin-kansiosta artifactory.bat:in – tai sh:n.

Mitäs sitten? Nyt olisi repository pystyssä, ainakin hetken. Pidemmäksi aikaa sen saa päälle asentamalla sen serviceksi. Tätä ennen on kuitenkin myös syytä asettaa ARTIFACTORY_HOME ympäristömuuttuja, osottamaan johonkin sopivaan olemassaolevaan kansioon. Muuten artifactory luo asetukset ja muut käyttäjäprofiilisi alle. Kun olet tyytyväinen artifactoryn toimintaan, löytyy bin-kansiosta ytimekäs installservice.bat jolla saat ratkaisun pyörimään windows-palveluna (Linux käyttäjät, sorry, joudutte järkeilemään tämän itse, kun omassa koneessani on vain windows 7. Olisiko apua install.sh scriptistä? 😉

Seuraavaksi on syytä kertoa Mavenille että käyttää kaikkiin pyyntöihin vain ja ainoastaan tätä omaa artifactory repositoryä. Tämän voi tehdä käyttäjäkohtaisessa settings.xml tiedostossa profiilien alla, mutta varmaan helpointa on lisätä pom.xml tiedostoon jotain tämäntapaista:

<repositories>
  <repository>
    <id>central</id>
    <url>http://http://localhost:8081/artifactory/repo</url>
    <snapshots>
      <enabled>false</enabled>
    </snapshots>
  </repository>
  <repository>
    <id>snapshots</id>
    <url>http://http://localhost:8081/artifactory/repo</url>
    <releases>
      <enabled>false</enabled>
    </releases>
  </repository>
</repositories>
<pluginRepositories>
  <pluginRepository>
    <id>central</id>
    <url>http://http://localhost:8081/artifactory/plugins-releases</url>
    <snapshots>
      <enabled>false</enabled>
    </snapshots>
  </pluginRepository>
  <pluginRepository>
    <id>snapshots</id>
    <url>http://http://localhost:8081/artifactory/plugins-snapshots</url>
    <releases>
      <enabled>false</enabled>
    </releases>
  </pluginRepository>
</pluginRepositories>
Ja tuossapa tietysti pidemmän päälle localhostin tilalle todellinen palvelinosoite kun saat sen pysyvämmin pystyyn. Tämä ylikirjoittaa mm. central repositoryt siten että aina mennään artifactoryn kautta. Lisäksi voisit vielä pistää settings.xml tiedostoosi tällaisen:
<mirrors>
  <mirror>
    <id>artifactory</id>
    <mirrorOf>*</mirrorOf>
    <url>http://localhost:8081/artifactory/repo</url>
    <name>Artifactory</name>
  </mirror>
</mirrors>

Ehkä ekstravarovaisuutta – mutta tuo tekee kaikkien osoitteiden eteen taas mirrorin joka menee artifactoryn kautta. Nyt voit kokeilla ottaa käyttöön uuden pluginin ja seurata mavenin log-viestejä: Pyynnöt menevät nyt artifactory proxyn kautta.

Vaihe 2

Kun haluat julkaista tuotoksesi artifactoryyn oman levyn sijasta voit lisätä pom.xml tiedostoon nämä tiedot:

<distributionManagement>
  <snapshotRepository>
    <id>asantala_w7</id>
      <name>asantala_w7-snapshots</name>
      <url>http://localhost:8081/artifactory/libs-snapshots-local</url>
  </snapshotRepository>
  <repository>
    <id>asantala_w7</id>
    <name>asantala_w7-releases</name>
    <url>http://localhost:8081/artifactory/libs-releases-local</url>
  </repository>
</distributionManagement>

Selvää kuin pässi, eikö? Säädämme siis julkaisu-repositoryksi snapshoteille ja aidoille julkaisuille Artifactoryn. Nyt voit tehdä esim.

mvn deploy

Ja katsoa miten projekti paukkuu paikalleen. Repository hallinnasta voi katsella miten omat tuotokset ja proxyn kautta ladatut plug-init siellä muhivat. Jos repository vaatii autentikointia, voit vielä lisätä settings.xml:ään määrityksen em servereille. Tarkista että serverin id täsmää edellämainittuihin säätöihin, ja aseta tunnus ja salasana siten miten olet ne artifactoryssä säätänyt (ethän käytä oletussalasanoja missään palvelimessa, ethän…?)

<servers>
  <server>
    <id>asantala_w7</id>
    <username>admin</username>
    <password>password</password>
  </server>
</servers>

Ensi jaksossa kirjailen siitä miten Maven, Subversion, Artifactory ja SCM plugin ja Release plugin toimivat yksiin – jotta saat automaattisesti snapshoteista julkaisuversioita ja versionumeroita päiviteltyä ilman että täytyy käsin muutella POM tiedostoa joka kerta. Tämä on Maven 2:sen uusi ominaisuus.

Mainokset

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out / Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out / Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out / Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out / Muuta )

Muodostetaan yhteyttä palveluun %s