Domanda

(Vedere le modifiche di seguito.)

Il motivo non posso usare il classpath, è perché ho la necessità di gestire alcune non le librerie java, e sto compilando un non-progetto java.

Sto cercando di usare maven dipendenze in un antrun chiamata, la seguente documentazione sulla maven sito:

http://maven.apache.org/plugins/maven-antrun-plugin/examples/classpaths.html

In fondo alla pagina:

<property name="mvn.dependency.jar" 
      refid="maven.dependency.my.group.id:my.artifact.id:classifier:jar.path"/>
<echo message="My Dependency JAR-Path: ${mvn.dependency.jar}"/> 

Io non riesco a fare questo lavoro, non importa quanto cerco.Ho provato con ${} in tutto il refid contenuto, ho provato due punti, punti, ecc..come separatori in ogni modo che posso pensare.

Qualcuno può dirmi che cosa che dovrebbe refid davvero per alcuni comuni della dipendenza?

EDIT:

Grazie per la risposta.

Usando il tuo esempio SingleShot, ho il seguente:

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <executions>
      <execution>
        <id>create-messages</id>
        <phase>compile</phase>
        <configuration>
          <tasks>
            <property name="build.compiler" value="extJavac"/>
            <property name="compile_classpath" refid="maven.compile.classpath"/>
            <property name="runtime_classpath" refid="maven.runtime.classpath"/>
            <property name="test_classpath" refid="maven.test.classpath"/>
            <property name="plugin_classpath" refid="maven.plugin.classpath"/>

            <property name="log4j.jar" refid="log4j:log4j:jar"/>
            <echo message="Where is the Log4J JAR?: ${log4j.jar}"/>
          </tasks>
        </configuration>
        <goals>
          <goal>run</goal>
        </goals>
      </execution>
    </executions>
    <dependencies>
      <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.14</version>
      </dependency>
    </dependencies>
  </plugin>

Ed ecco cosa ottengo quando esegui mvn di compilazione:

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building Chat Component
[INFO]    task-segment: [compile]
[INFO] ------------------------------------------------------------------------
Downloading: http://<redacted>/content/groups/public/log4j/log4j/1.2.14/log4j-1.2.14.pom
2K downloaded
Downloading: http://<redacted>/content/groups/public/log4j/log4j/1.2.14/log4j-1.2.14.jar
358K downloaded
[INFO] [antrun:run {execution: create-messages}]
[INFO] Executing tasks
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error executing ant tasks

Embedded error: Reference log4j:log4j:jar not found.
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Fri Oct 16 14:54:19 PDT 2009
[INFO] Final Memory: 7M/80M
[INFO] ------------------------------------------------------------------------

EDIT (2):

Guardando il codice sorgente collegata, ho deciso di eseguire "mvn -X compilare" e grep per la "Conservazione", che si trasforma in un mucchio di output di log in cui le cose sono memorizzati.

Di interesse sono i fatti che la dipendenza sto specificando esplicitamente non viene visualizzato nell'elenco, e che quando posso passare ad una chiave basata su una delle voci che ho fare vedi, ho ancora l'errore.

È stato utile?

Soluzione

In base al codice che SingleShot collegata, e casuale frugando fino a quando ha funzionato, ecco come ho ottenuto questo problema "lavoro", (lo dico tra virgolette, perché si sente molto tenue.)

Ecco il modo per farlo funzionare correttamente:

<property name="log4j_location" 
                value="${maven.dependency.log4j.log4j.jar.path}"/>
<echo message="${log4j_location}"/>

Alcune cose importanti da notare:Si non utilizzare il plugin di maven dipendenza come refid in impostazione ant proprietà.Devi usare ${} per ottenere il maven var valore.

Sembra che la dipendenza deve essere di livello superiore dell'elenco di dipendenza, rendendo log4j dipendenza del antrun plugin non esporre al plugin in ogni modo che posso vedere.

Tutti i separatori di percorso sono i punti (.), senza i due punti (:) che è il motivo per cui alla fine ho controllato la mia risposta come corretta.

Soapbox:

Io consiglio vivamente a chiunque considerando Maven usare Ant maven plugin o, ancora meglio, utilizzare la Formica con Ivy invece.

Questo particolare problema è un fulgido esempio del tutto assurdo il livello di difficoltà nel fare una qualsiasi cosa al di fuori della norma con maven.

Dico questo dopo aver attuato un intero sistema di generazione basato su Maven2, e avendo anche realizzato diversi sistemi di generazione in Formica.Ho usato entrambi i Maven2 e Ant con complesso costruisce coinvolgono Java, Flex/AS3, C# e C++.Maven ha senso per Java progetti che hanno no dipendenze esterne su progetti in altre lingue.

Maven si riesce a risolvere alcune cose che non sono affrontati in modo implicito da parte di Ant, ma con un po ' di pianificazione iniziale, Ant è molto più flessibile, documentati meglio, e meno buggy strumento.

Se si decide di andare ant percorso, assicurarsi di definire una struttura per i vostri progetti di capire che il vostro sistema di dipendenza (Utilizzare uno).

Penso che alla fine sarà molto più felice con Maven, come non spendere crunch tempo a cercare di risolvere il vostro sistema di generazione.

Altri suggerimenti

Come un addendum alla risposta di Aaron H. sopra, ho dovuto impostare la versione del plugin per 1.3 per che effettivamente lavorare. Stavo usando senza una versione specifica e stavo 1.1 (in cui nulla sembra funzionare).


      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.3</version>
        ...
      </plugin>

Senza un esempio di ciò che è stato digitato nella vostra POM sua difficile da dire, ma prendere in considerazione un esempio concreto. Diciamo che il tuo riferimenti POM log4j (groupId = log4j, artifactId = log4j). Credo che questo sia come si dovrebbe fare riferimento che JAR nel file Ant:

<property name="log4j.jar" refid="maven.dependency.log4j:log4j:jar.path"/>
<echo message="Where is the Log4J JAR?: ${log4j.jar}"/>

L'ideale non dovrebbe avere a riferimento JAR specifici, ma piuttosto, fare riferimento l'intero percorso di classe per l'ambito appropriato, come la documentazione di un po 'sparse per il plug-in indica.

Se avete ancora problemi, si prega di inviare il tag <dependency> per un Maven POM dipendenza che si sta utilizzando e posso cercare di essere più specifico.

Ho guardato il il codice del plugin per confermare.

Questo funziona per me.

<copy file="${javax.mail:javax.mail-api:jar}" todir="tomcat/lib" />
<copy file="${org.springframework:spring-instrument-tomcat:jar}" todir="tomcat/lib" />
<copy file="${postgresql:postgresql:jar}" todir="tomcat/lib"/>

http://maven.apache.org/plugins/ Maven-antrun-plugin / examples / classpaths.html ha la spiegazione di come fare riferimento dipendenze formano il percorso di classe formica.

C'è un bug nella documentazione . Il percorso dovrebbe essere della forma:

<property name="mvn.dependency.jar" 
  value="${maven.dependency.my.group.id.my.artifact.id.classifier.jar.path}"/>

Quindi, la chiave corretta per la vostra dipendenza log4j potrebbe essere:

maven.dependency.log4j.log4j.jar.path

Si noti inoltre che dovrebbe essere value= piuttosto che refid=, quindi la proprietà completa sarebbe:

<property name="log4j.jar" 
      value="${maven.dependency.log4j.log4j.jar.path}"/>
<echo message="My Dependency JAR-Path: ${log4j.jar}"/> 

Ho una formica esistente e abbiamo pensato di usare (nuovo) Maven chiamarlo. Ho incontrato problemi che io non ricordo chiaro, ma è legato alla sentieri di classe, forse solo come la tua.

Il problema è che la "formica" stiamo usando tutti i giorni è uno script di shell che imposta sentieri di classe, sia su XNIX e Windows. Non ho confrontato sentieri classe stabiliti da esso e di quelli disponibili Maven, ma la mia prova ha mostrato essi non partita e formica non verrà eseguito con alcuni sentieri passati da Maven.

Quello che sto usando è "exec-maven-plugin" ed eseguire formica come un programma esterno con alcuni argomenti applicati. Questo è sicuro di lavorare, ma aggiunge le dipendenze di troppo, però.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top