2015-01-25 8 views
5

Il progetto su cui sto lavorando deve utilizzare Google Protobuf per la serializzazione, pertanto è necessario generare un numero di stub prima della creazione del codice.Utilizza il carattere jolly negli argomenti del plugin exec di Maven

Gli argomenti della riga di comando che uso è:

protoc -I=src/proto --java_out=src/main/java src/proto/*.proto 

Questo funziona bene nella console.

Ora desidero utilizzare il plugin exec di Maven in modo che questa procedura manuale diventi parte della build di Maven. La sezione pom che ho usato è:

<build> 
     <plugins> 
      <plugin> 
       <artifactId>exec-maven-plugin</artifactId> 
       <groupId>org.codehaus.mojo</groupId> 
       <version>1.3.2</version> 
       <executions> 
        <execution> 
         <id>Google Protobuf Stub Generation</id> 
         <phase>generate-sources</phase> 
         <goals> 
          <goal>exec</goal> 
         </goals> 
         <configuration> 
          <executable>protoc</executable> 
          <commandlineArgs>-I=src/proto --java_out=src/main/java src/proto/*.proto</commandlineArgs> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

Un errore è dato a lamentarsi non v'è alcun file chiamato:. Src/proto/* proto

Tuttavia, funziona bene se tolgo il carattere jolly e specificare un file specifico, ad es

<commandlineArgs>-I=src/proto --java_out=src/main/java src/proto/model.proto</commandlineArgs> 

Penso che sia il carattere jolly * che causa il problema poiché Maven potrebbe avere un modo diverso di gestirlo.

La mia domanda è: come posso specificare "Tutti i file con estensione .proto in quella cartella" in Maven?

+0

Hai avuto successo o avresti bisogno di più aiuto? –

+1

Sono riuscito a bypassare questo problema scrivendo uno script di shell e chiamandolo in Maven. – Kevin

+0

Buona idea, avrei dovuto pensarci nella mia risposta. –

risposta

1

Se si sta chiamando il comando protoc su una shell, l'operatore jolly viene sostituito dalla shell con tutti i file corrispondenti. il comando protoc stesso non è in grado di gestire il carattere jolly.

Ad esempio:

Chiamando "ls * .txt" sul tuo guscio, il comando ls non è chiamato con l'argomento "* .txt". La shell traduce la chiamata da comando a "ls file1.txt file2.txt ..."

Soluzione: creare un comando da find xargs e protoc.

1

Se si dispone di bash, è possibile imbrogliare e utilizzare 'bash' come eseguibile, '-c' come primo argomento e il comando completo come secondo argomento.

In sostanza, il secondo argomento verrà eseguito nella shell, quindi i caratteri jolly (*) funzionano e generalmente si ottiene la stessa funzionalità dell'utilizzo diretto della riga di comando.

+0

Questa opzione ha funzionato nel mio caso. Invece di chiamare; eseguibile: argomenti rm: "-rf pycompss *". Chiamo; eseguibile: argomenti bash: "-c rm -rf pycompss *" –

Problemi correlati