maven exec:java run class file within jar

前端 未结 4 644
眼角桃花
眼角桃花 2020-12-31 19:00

I have my code packaged into a jar

The jar is packaged ok.

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

com/
com/codevalid/
com/codevalid/App.class
log4j.x         


        
相关标签:
4条回答
  • 2020-12-31 19:33

    Ok, this is what i finally ended up doing.
    I built the jar using

    mvn assembly:single
    

    and used

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

    I did see an alternative where i could have used

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

    But i was not sure how pass the name of the jar as a classpath

    0 讨论(0)
  • 2020-12-31 19:34

    You can run a jar file using the exec:java goal by adding some 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>
    

    If you have an executable jar and don't want to define the entry point, you need to set the executable and use the exec:exec goal:

    <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 讨论(0)
  • 2020-12-31 19:34

    You have to specify classpathScope and includePluginDependencies or includeProjectDependencies parameters to pickup jar files on the classpath.

    Here is an example:

               <configuration>
                    <executable>java</executable>
                    <mainClass>com.google.jstestdriver.JsTestDriver</mainClass>
                    <classpathScope>test</classpathScope>
                    <includePluginDependencies>true</includePluginDependencies>
                    <includeProjectDependencies>true</includeProjectDependencies>
                    <commandlineArgs>--port 9876</commandlineArgs>
                </configuration>
    
    0 讨论(0)
  • 2020-12-31 19:40

    You need to include your jar file as a dependency to the exec plugin, e.g. like this:

    <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>
    

    You can skip the dependency declaration if the com.codevalid.App class is compiled as part of your current project.

    0 讨论(0)
提交回复
热议问题