Inlägg märkta ‘Java’

Installera ny Sun-Java i Ubuntu

måndag, 26 april, 2010

Java-versionerna i Ubuntus repository släpar efter ganska rejält och om man vill köra en senare version än den som finns i repositoryt kan man ladda ner Java manuellt och få Ubuntu att snappa upp detta. Förfarandet beskrivs på ett bra sätt i detta foruminlägg och kan vara aktuellt nu när Oracle släppt update 20 som fixar ett allvarligt säkerhetshål.

Att hantera beroenden i Maven 2

onsdag, 3 december, 2008

Maven är bra på många sätt och vis. Det underlättar verkligen byggprocessen och beroenden mellan olika komponenter hanteras tämligen väl. Det är ändå inte ovanligt att man behöver hjälpa Maven lite på traven om man har många snåriga beroenden och det är ämnet för dagens inlägg.

Om ditt projekt har ett beroende till tredjepartskomponenten VeryGoodLibraryA-1.0 som beror på StandardComponent-2.1 kommer Maven att hantera detta transitiva beroende (från version 2.0) och ladda ner (om det behövs) och tillhandahålla såväl VeryGoodLibraryA-1.0 som StandardComponent-2.1. Men vad händer om du även beror på VeryGoodLibraryB-1.0 som i sin tur beror på StandardComponent-2.5?

Folk som är inne i OSGi-svängen kanske rycker på axlarna undrar vad som är problemet. Men så roligt ska vi inte ha eftersom vi nu antar att såväl VeryGoodLibraryA-1.0 som VeryGoodLibraryB-1.0 klarar sig bra med StandardComponent-2.5 som råkar vara bakåtkompatibel med StandardComponent-2.1.

Hur reder vi ut detta? Till att börja med kanske man inte vet att det är VeryGoodLibraryA och VeryGoodLibraryB som har olika åsikter om vad som är lämplig version på StandardComponent. Lyckligtvis är det en av de saker som Maven-pluginet Maven Dependency Plugin kan hjälpa oss med.

För att se vilka beroenden som huserar i vårt projekt kör vi följande harang:
mvn dependency:resolve

I den rapport som spottas ut ser vi egentligen bara problemet, Maven har favoriserat fel version av StandardComponent (2.1 istället för 2.5).

För att bli lite klokare på vem som har bereonden till vem prövar vi träd-vyn:
mvn dependency:tree

Med samma enkla exempel som ovan skulle svaret kunna se ut ungefär så här:

[INFO] +- org.verygoodlibrary:A:jar:1.0:compile
[INFO] | +- org.standardcomponent:standard-component:jar:2.1:compile
[INFO] +- org.verygoodlibrary.B:jar:1.0:compile
[INFO] | \- org.standardcomponent:standard-component:jar:2.5:compile

Nu bör vi ha fått lite bättre kläm på problemet och vet hur vi skulle vilja ha det. Det finns, som vanligt, flera sätt att lösa problemet och innan man gör något förhastat kan det vara klokt att läsa en introduktion till beroende-hanteringen i Maven.

I introduktionen ovan kan man läsa att Maven favoriserar det beroende som är närmast till ditt projekt i beroendeträdet. Om beroendena är på samma nivå avgör (sedan Maven 2.0.5) deklarationsordningen.

Ett sätt att lösa det förenklade exemplet ovan skulle kunna vara att byta plats på beroendena (dependency-elementen för VeryGoodLibraryA och VeryGoodLibraryB) i pom.xml:en.

Ett annat sätt att lösa ut knuten skulle kunna vara att säga åt Maven att ignorera VeryGoodLibraryA:s beroende på StandardComponent-2.1. Då kommer VeryGoodLibraryB:s beroende på StandardComponent-2.5 att kunna lösas ut och allt blir bra. Detta kan göras med exclusion-element på VeryGoodLibraryA:s dependency-element i ditt projekts pom.

 <dependency>
  <groupid>org.verygoodlibrary</groupid>
  <artifactid>A</artifactid>
  <version>1.0</version>
  <exclusions>
   <exclusion>
    <artifactid>standard-component</artifactid>
   </exclusion>
  </exclusions>
 </dependency>

I mitt konkreta verkliga fall består mitt projekt av en hel hierarki med egna projekt. Där tyckte jag det blev enklast att speca lite versioner på toppnivån (den ”översta” pom.xml:en).

Har ni egna erfarenheter av Mavens beroendehantering eller byggverktyg i allmänhet? Eller bättre lösningar på ovanstående problem? Kommentera gärna isf.

Farmor och farfar, spelkväll på Liseberg och Ubuntu på jobbet

onsdag, 21 maj, 2008

I måndags hade vi farmor och farfar på middagsbesök vilket var mycket trevligt. Vi hann även med efterrätt hos Joel innan vi avrundade kvällen i Fjärås där de bor hos farbror Hans med familj.

Igår hyrde Know IT spelhuset på Liseberg så vi spelade alla möjliga spel kvällen lång. Roligast var nog bilspelen som gick att köra mot varandra (vi var fyra stycken som körde ett antal mycket jämna lopp), skjuta-döda-spelen är jag inte lika road av eftersom det känns ganska enahanda.

I nuläget sitter jag på JavaForum och lyssnar på ett föredrag om Scala med ena örat. Intressant men troligen inget jag kommer att jobba med på ett tag. Har även förberett morgondagens JavaOne-föredrag eftersom det är lite tajt med tid denna vecka.

Ikväll spelas den helengelska Champions League-finalen mellan Manchester United och Chelsea. Ska hem till kapten (och Joel kommer också) och titta. Mitt förhandstips är United men det blir jämnt. Gissar på 1-1 vid full tid och att United vinner på straffar.

Jag har för övrigt slängt ut Vista på min jobbdator (Thinkpad T60). Ubuntu går mycket kvickare och är ju förstås roligare och trevligare på många sätt.

Jfokus 2008

torsdag, 31 januari, 2008

Gårdagens heldag på Jfokus var mycket givande med flera bra föredrag.

Jag gick på dessa:

  • Arkitektur på molnfri höjd – och neråt (Torbjörn Stavenek, Devoteam Quaint)
  • The Future of Java (Thorbiörn Fritzon, Sun Microsystems)
  • Sluta skriva ‘new’ – En jämförelse av Dependency Injection ramverk (Erik Hellman, IBS JavaSolutions AB)
  • Ett litet steg mot event-driven arkitektur (Dan Bergh Johnsson, Omegapoint)
  • Five Considerations for Software Developers (Kevlin Henney, Curbralan)
  • Web 2.0 development with Java (Stephan Janssen, Parleys.com)
  • Composite Oriented Programming with Qi4j (Rickard Öberg, Jayway)
  • 10 ways to screw up with Scrum and XP (Henrik Kniberg, Crisp AB)

Alla de föredrag jag gick på var sevärda men de som gjorde störst intryck var Arkitektur på molnfri höjd – och neråt, Five Considerations for Software Developers och 10 ways to screw up with Scrum and XP. Gemensamt för dessa är att de inte var speciellt kodnära utan fokuserade mer på hur man får ett projekt och en grupp att lyckas.

Tanken är att presentationerna ska dyka upp på Parleys men i skrivande stund har de inte kommit upp.

Bildöverföringsprogram

onsdag, 23 januari, 2008

Idag uppdaterade jag mitt bildöverföringsprogram som vi använder för att föra över bilder från digitalkamerorna. Har funderat lite på att skriva om det i Java men kan inte riktigt motivera det eftersom det uppfyller kraven i sin nuvarande Perl/Tk-skepnad. En variant skulle vara att göra det webbaserat så att man kan överföra bilderna till arkivet även om man inte är hemma.

I nuläget finns möjlighet att välja en av flera förkonfigurerade enheter (monteringsplatser), få bilderna placerade i en katalogstruktur beroende på nuvarande år, tagga bilderna (keyword-fältet enligt EXIF-standarden) med en eller flera taggar, få se bilderna som tumnaglar (använder filhanteraren: nautilus, konqueror eller xffm beroende på vad som finns tillgängligt), flytta eller kopiera bilderna, slideshow, omdöpning av filerna, rätt rättigheter samt automatisk rotering beroende på EXIF-informationen (sätts iaf av EOS:en).

Skulle iofs vara intressant att skriva det i Java för att se om det går att komma i närheten av de ca 200 raderna Perl-kod…

Mini-Java

lördag, 1 september, 2007

Kan inte låta bli att kommentera Suns planer på en minimal JRE. Det är hög tid att de snor ihop en dylik lösning, det är inte bra för Javas överlevnad på webbklientsidan att det tar snorlång tid att dra igång en applet första gången JRE:n laddas. Att ladda behövlig JRE-funktionalitet ”on demand” i bakgrunden känns helt logiskt.

Regn, rusk och Ruby

tisdag, 3 juli, 2007

Vaknade tidigt, kl 6 räknar jag som tidigt iaf i semestertider, och kunde snabbt konstatera att väderprognoserna tyvärr åter varit pricksäkra. Regn och åter regn.

Nåväl, saker och ting kunde vara mycket värre. Här finns både ström och utmärkt 3G-täckning :) Eftersom övriga besättningen har bättre lycka med morgonsömnen får jag roa mig själv ett tag.

Om man försöker hänga med i Javasvängen är det svårt att missa JRuby, en implementation av Ruby i Java. Behovet i nuläget för min del är inte direkt akut men det är förstås bra att veta vilka verktyg som finns tillgängliga och vad de är lämpliga till.

Efter att ha laddat ner och prövat lite, med god hjälp från en bra introduktion, kan jag konstatera att det nog kan vara trevligt och användbart vid något kommande tillfälle när Java känns för omständligt men ändå omistligt.

Har även laddat ner och testat PMD som kan utforska Java-kod och varna för potentiella problem. Provkörde det på ett projekt i Eclipse och det verkar ha en del vettiga synpunkter. Rekommenderas för alla som eventuellt kan tänkas missa att exempelvis kommentera en tom konstruktor. :)