2011-10-21 5 views
5

Ho una libreria esterna che deve essere collegata dinamicamente con un test nel mio progetto java. Il progetto è configurato con Maven, e ho bisogno di aggiungere quanto segue ai miei argomenti VM in Eclipse per la prova da superare:È possibile passare in modo coerente pass -Djava.library.path a un test di prova all'interno di un file POM?

-Djava.library.path=${env_var:HOME}/.m2/repository/natives/dist/lib -ea

Purtroppo questo significa che l'esecuzione del test da Maven usando: mvn test avrà sempre esito negativo .

Un lavoro intorno è quello di chiamare mvn con un argomento -DargLine in questo modo:

mvn test -DargLine="-Djava.library.path=/Users/rob/.m2/repository/natives/dist/lib -ea"

chiaro tuttavia che questa ha il problema di essere specifica per la mia macchina, quindi non posso metterlo direttamente in il file pom. Immagino che quello che sto cercando sia un modo per modificare quella stringa su base per macchina, come la prima linea per Eclipse.

Sono anche curioso come ho potuto mettere nel file POM, ho provato collocandolo all'interno di <argLine> tag, ma questo non sembra funzionare, c'è qualcosa che mi manca:

<argLine>-Djava.library.path=/Users/rob/.m2/repository/natives/dist/lib -ea</argLine>

risposta

3

Dopo alcune ricerche ho scoperto una soluzione decente al mio problema.

In Maven file settings.xml, è possibile definire un percorso per il localRepository qui ci sono le impostazioni predefinite se si imposta nulla:

  • Unix/Mac OS X - ~/.m2
  • Windows - C: \ Documents and Settings \ username.m2

Come potete vedere questo corrisponde almeno la prima parte della directory stavo cercando di impostare: /Users/rob/.m2

Poiché il collegamento dinamico è specifico del sistema operativo, è possibile anche impostare un profilo per i suffissi di percorso alternativi. È possibile farlo in un .pom come questo:

<profile> 
    <id>OSX</id> 
     <activation> 
      <os> 
       <family>mac</family> 
      </os> 
     </activation> 
    <properties> 
     <dynamic.libLoc>${settings.localRepository}/natives/dist/lib</dynamic.libLoc> 
    </properties> 
</profile> 

è possibile utilizzare questa proprietà nel .pom per il progetto che si desidera testare. Sotto la categoria plugin è possibile aggiungere:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <configuration> 
     <argLine>-Djava.library.path=${dynamic.libLoc}</argLine> 
    </configuration> 
</plugin> 

Ora Maven possono eseguire questi test, senza che gli utenti debbano specificare la posizione delle librerie collegate dinamicamente. Puoi anche gestire utenti con diversi sistemi operativi semplicemente aggiungendo un altro profilo.

Nota: per quanto riguarda il problema con <argLine> precedente. Penso che stavo semplicemente usando il torto .pom

Problemi correlati