2017-02-20 2 views
0

In der Datei pom.xml gibt es eine Verwendung von maven-dependency-plugin zum Herunterladen einer bestimmten externen JAR-Datei an einen separaten Speicherort (in /tmp/externalTestJars/testjar.jar) .mvn exec: java zum Ausführen einer Java-Datei in einer externen JAR-Datei

Und ich möchte exec-maven-plugin verwenden, um eine Java-Klasse in der Datei testjar.jar (Main.java) ausführen.

Ich fand this SO question Frage ein bisschen die gleiche Frage, aber die Antwort für diese Frage hat mir nicht geholfen.

Wenn ich direkt die Main.java-Datei (im ursprünglichen Projekt, wo die .jar erstellt wurde, mit) ausführen, kann ich die unten Pom-Konfiguration verwenden.

<plugin> 
<groupId>org.codehaus.mojo</groupId> 
<artifactId>exec-maven-plugin</artifactId> 
<version>1.3.2</version> 
<configuration> 
    <mainClass>org.example.Main</mainClass> 
    <!-- need to pass two arguments to the Main.java file main method --> 
    <arguments> 
     <argument>arg one</argument> 
     <argument>arg two</argument> 
    </arguments> 
</configuration> 
</plugin> 

In der obigen SO-Frage hat es eine Antwort wie unten, um eine Java-Datei in einer .jar-Datei auszuführen.

<plugin> 
<groupId>org.codehaus.mojo</groupId> 
<artifactId>exec-maven-plugin</artifactId> 
<version>1.3.2</version> 
<configuration> 
    <mainClass>org.example.Main</mainClass> 
    <arguments> 
     <argument>-jar</argument> 
     <argument>/tmp/externalTestJars/testjar.jar</argument> 
    </arguments> 
</configuration> 
</plugin> 

Aber in meinem Fall werden diese Argumente wie die für das Hauptverfahren in Main.java Sinus passieren berücksichtigt werden es zwei Argumente erwartet. Dieser Ansatz funktionierte nicht für mich.

Kann dies mit exec Maven-Plugin getan werden oder gibt es eine andere Methode, um das gleiche zu tun.

+0

Dies kann auch hilfreich sein, wenn der Downloadbereich für das Plug-in nicht relevant ist. Damit können wir das als Plugin-Abhängigkeit hinzufügen. http://www.mojohaus.org/exec-maven-plugin/examples/example-exec-using-plugin-dependencies.html – prime

Antwort

1

Wenn Sie die Klasse ähnlich wie java -cp /tmp/externalTestJars/testjar.jar org.example.Main ausführen möchten, sollte das Plugin wie folgt konfiguriert werden.

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.3.2</version> 
    <configuration> 
     <executable>java</executable> 
     <arguments> 
      <argument>-cp</argument> 
      <argument>/tmp/externalTestJars/testjar.jar</argument> 
      <argument>org.example.Main</argument> 
     </arguments> 
    </configuration> 
</plugin> 

Wenn Sie die Klasse ähnlich wie java -jar /tmp/externalTestJars/testjar.jar ausführen möchten (vorausgesetzt, org.example.Main ist definiert als Main-Class im MANIFEST.MF) das Plugin sollte wie unten konfiguriert werden.

<configuration> 
    <executable>java</executable> 
    <arguments> 
     <argument>-jar</argument> 
     <argument>/tmp/externalTestJars/testjar.jar</argument> 
    </arguments> 
</configuration> 

In beiden Fällen führen Sie es mit mvn exec:exec

edit: Ein Beispiel für mvn exec:java verwenden.

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.3.2</version> 
    <executions> 
     <execution> 
      <phase>install</phase> 
      <goals> 
       <goal>java</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <mainClass>org.example.Main</mainClass> 
     <additionalClasspathElements> 
      <additionalClasspathElement> 
       /tmp/externalTestJars/testjar.jar 
      </additionalClasspathElement> 
     </additionalClasspathElements> 
    </configuration> 
</plugin> 

Anmerkung: Wenn das Projekt und die JAR-Datei testjar.jar sowohl die Klasse enthalten org.example.Main dann die Klasse aus dem Projekt ausgeführt wird. Die Klassenpfadelemente, die durch additionalClasspathElement definiert sind, werden an den Klassenpfad des Projekts angehängt.

+0

Großartig (Y) Dies scheint die Lösung für das Problem zu sein. Vielen Dank. – prime

+0

Btw können wir dies für mvn exec erreichen: Java, so dass wir die Main-Klasse in der Pom setzen können. – prime

+0

@prime Schauen Sie sich das Beispiel für 'exec: java' an. – SubOptimal

Verwandte Themen