2013-08-23 7 views
5

Ho un progetto Java in Eclipse, con test JUnit nella mia directory src/test. Ho anche aggiunto una classe ai miei test con i microbenchmark di Caliper e mi piacerebbe poter eseguire questi test da Eclipse.Esecuzione del calibro da eclissi nel campo di prova di Maven

Poiché il codice pinza è un codice di prova, ho aggiunto Caliper come dipendenza in Maven nello scope test. Questo lo fa apparire nel classpath quando eseguo i test JUnit, ma non riesco a vedere un modo per eseguire una classe arbitraria con dipendenze di test nel classpath. Quello che ho cercato di fare è stato aggiungere una nuova configurazione di esecuzione per un'applicazione Java, pensando che potrei lanciare CaliperMain con la classe giusta come parametro, ma il vaso Caliper non è sul classpath e non riesco a vedere come aggiungerlo.

Non voglio spostare il mio codice di riferimento e la dipendenza nello scope main, poiché è un codice di prova! Sembra seriamente eccessivo trasferirlo in un progetto completamente separato.

+0

La configurazione di esecuzione di Eclipse elenca solo "Dipendenze Maven" per il mio classpath. Non sembra separare le dipendenze tra test e non test. Hai verificato che Caliper sia effettivamente incluso? – gk5885

+0

@ gk5885, è disponibile in Esplora pacchetti, disponibile nel percorso classe quando si esegue una configurazione di tipo 'JUnit' ma non disponibile sul percorso classe quando si esegue una configurazione di tipo 'Applicazione Java'. –

+0

Non sono sicuro di comprendere appieno il tuo scenario, in particolare "esegui una classe arbitraria con dipendenze di test nel classpath". Non puoi semplicemente creare ed eseguire un test JUnit che farebbe esattamente ciò che CaliperMain normalmente farebbe nel suo metodo principale? – Morfic

risposta

5

Si dovrebbe essere in grado di farlo con lo Maven Exec Plugin. Per il mio progetto, ho optato per creare un profilo di riferimento che possa essere eseguito con il comando maven mvn compile -P benchmarks.

Per configurare qualcosa di simile, è possibile aggiungere qualcosa sulla falsariga di quanto segue al pom.xml, specificando la portata del percorso di classe come prova usando il tag <classpathScope>:

<profiles> 
    <profile> 
     <id>benchmarks</id> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.codehaus.mojo</groupId> 
        <artifactId>exec-maven-plugin</artifactId> 
        <version>1.2.1</version> 
        <executions> 
         <execution> 
          <id>caliper</id> 
          <phase>compile</phase> 
          <goals> 
           <goal>java</goal> 
          </goals> 
          <configuration> 
           <classpathScope>test</classpathScope> 
           <mainClass>com.google.caliper.runner.CaliperMain</mainClass> 
           <commandlineArgs>com.stackoverflow.BencharkClass,com.stackoverflow.AnotherBenchmark</commandlineArgs> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 

In alternativa, se si' d come per specificare un sacco di opzioni per la pinza, è probabilmente più facile da utilizzare i tag <arguments>:

<executions> 
    <execution> 
     <id>caliper</id> 
     <phase>compile</phase> 
     <goals> 
      <goal>java</goal> 
     </goals> 
     <configuration> 
      <classpathScope>test</classpathScope> 
      <mainClass>com.google.caliper.runner.CaliperMain</mainClass> 
      <arguments> 
       <argument>com.stackoverflow.BencharkClass</argument> 
       <argument>--instrument</argument> 
       <argument>runtime</argument> 
       <argument>-Cinstrument.allocation.options.trackAllocations=false</argument> 
      </arguments> 
     </configuration> 
    </execution> 
</executions> 

più opzioni di configurazione (Li ke -Cinstrument.allocation.options.trackAllocations sopra) può essere trovato here e più opzioni di runtime (come --instrument sopra) possono essere trovate here.

Quindi, se si utilizza il plugin Eclipse m2 Maven, è possibile fare clic destro sulla cartella del progetto e selezionare Run as... -> Maven Build... e inserire qualcosa di simile clean install nella casella di Goals input e benchmarks nella casella di Profiles input e cliccare Run e si dovrebbe vedere l'output nella tua console Eclipse.

È importante notare che ho utilizzato una build di snapshot locale di Caliper verificando l'origine utilizzando , che è consigliata al momento di questo post per sfruttare l'ultima API.

+0

Questo mi dà un errore: '' '' [stderr] CICompilerCount di 1 non è valido; deve essere almeno 2 [stderr] Errore: impossibile creare la Java Virtual Machine. Errore [stderr]: si è verificata un'eccezione irreversibile. Il programma uscirà .'' Potresti darmi un puntatore su come risolvere questo problema, cioè come passare l'argomento necessario alla JVM? – panmari

Problemi correlati