2012-03-29 7 views
6

Ich habe meinen Code in ein Glas verpacktmaven exec: java run class file in jar

Das Glas ist ok verpackt.

jar -tfv target/test-1.0-SNAPSHOT.jar 

com/ 
com/codevalid/ 
com/codevalid/App.class 
log4j.xml 
META-INF/maven/com.codevalid/test/pom.xml 
META-INF/maven/com.codevalid/test/pom.properties 

Ich kann sie ausgeführt werden, wenn sie vorhanden als einzelne Klassendateien sind mit exec:java

Wie Klasse Datei innerhalb jar laufen mit Maven exec:java?

+1

Was ist Ihre Frage? – magomi

+0

Entschuldigung, wie man eine Klassendatei in jar mit maven exec ausführt: java – codevalid

+0

Das könnte helfen. http://stackoverflow.com/questions/42337857/mvn-execjava-to-run-a-java-file-in-an-external-jar-file – prime

Antwort

3

Sie müssen Ihre JAR-Datei als eine Abhängigkeit zum EXEC-Plugin, z. wie folgt aus:

<plugin> 
<groupId>org.codehaus.mojo</groupId> 
<artifactId>exec-maven-plugin</artifactId> 
<version>1.2.1</version> 
<executions> 
    <execution> 
    <phase>install</phase> 
    <goals> 
     <goal>java</goal> 
    </goals> 
    <configuration> 
     <mainClass>com.codevalid.App</mainClass> 
    </configuration> 
    </execution> 
</executions> 
<dependencies> 
    <dependency> 
    <groupId>myGroup</groupId> 
    <artifactId>test</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    </dependency> 
</dependencies> 

können Sie die dependency Erklärung überspringen, wenn die com.codevalid.App Klasse im Rahmen des aktuellen Projekts kompiliert wird.

+1

Hallo, Danke für die Info, aber das scheint nur zu funktionieren, wenn das Glas im Repository. Was ich tun wollte, ist das Glas zu testen, bevor ich es in den Repo installieren kann. Gibt es eine Möglichkeit, wo ich die ** Position dieses jar ** zu maven exec angeben kann: java – codevalid

5

Ok, das ist, was ich schließlich getan habe.
Ich baute das Glas

mvn assembly:single 

und verwendet

java -jar ./target/App-1.0-SNAPSHOT-jar-with-dependencies.jar com.codevalid.App 

Ich sehe tat eine alternative Verwendung, wo ich

mvn exec:java -Dexec.mainClass="com.codevalid.App" 

verwendet haben könnte, aber ich war nicht sicher, wie Sie den Namen übergeben die Glas als Klassenpfad

0

Sie müssen classpathScope und includePluginDependencies oder includeProjectDependencies Parameter, um Pickup-JAR-Dateien auf dem Classpath angeben. Hier

ein Beispiel:

  <configuration> 
       <executable>java</executable> 
       <mainClass>com.google.jstestdriver.JsTestDriver</mainClass> 
       <classpathScope>test</classpathScope> 
       <includePluginDependencies>true</includePluginDependencies> 
       <includeProjectDependencies>true</includeProjectDependencies> 
       <commandlineArgs>--port 9876</commandlineArgs> 
      </configuration> 
1

Sie können eine JAR-Datei mit dem exec:java Ziel ausführen, indem Sie einige arguments:

<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>target/myJar-1.0-SNAPSHOT.jar</argument> 
     </arguments> 
    </configuration> 
</plugin> 

Wenn Sie eine ausführbare jar und wollen nicht Definieren Sie den Einstiegspunkt, müssen Sie die executable einstellen und das exec:exec Ziel verwenden:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.3.2</version> 
    <configuration> 
     <executable>java</executable> 
     <arguments> 
      <argument>-jar</argument> 
      <argument>target/myJar-1.0-SNAPSHOT.jar</argument> 
     </arguments> 
    </configuration> 
</plugin> 
+0

Was ist, wenn ich einige Argumente an die Hauptmethode der Klasse 'org.example.Main' übergeben möchte? – prime

+1

@prime Ich habe es nicht getestet, aber ich denke, dass Sie [''] (http://www.mojohaus.org/exec-maven-plugin/exec-mojo.html#commandlineArgs) verwenden können Pass Argumente auf die eigentliche Anwendung – Kapep

+0

Danke für den Vorschlag, wird das überprüfen. Anyway hat eine Antwort auf das eigentliche Problem http: // stackoverflow.com/questions/42337857/mvn-execjava-zu-run-a-java-Datei-in-einem-externen-jar-Datei – prime