【问题标题】:Running a jar file having multiple main classes using command line使用命令行运行具有多个主类的 jar 文件
【发布时间】:2016-08-13 03:07:35
【问题描述】:

使用 pom.xml 中的以下代码在 jar 中添加了多个主要类,如下所示

<groupId>com.test</groupId>
        <artifactId>indexer</artifactId>
        <version>1.0.0-SNAPSHOT</version>

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.4.1</version>
    <executions>
        <execution>
            <phase>package</phase>
            <id>build-first</id>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <transformer
                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>com.test1</mainClass>
                    </transformer>
                </transformers>
                <finalName>first-runnable</finalName>
            </configuration>
        </execution>
        <execution>
            <phase>package</phase>
            <id>build-second</id>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <transformer
                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>com.test2</mainClass>
                    </transformer>
                </transformers>
                <finalName>second-runnable</finalName>
            </configuration>
        </execution>
    </executions>
</plugin>

但无法从命令行成功运行 jar 文件。尝试使用命令行作为
java -jar indexer-1.0.0-SNAPSHOT.jar com.test1 但是在 indexer-1.0.0-SNAPSHOT.jar 中获得 no main manifest 属性

谁能指导如何使用这个 jar 从命令行运行主要类。

谢谢

【问题讨论】:

  • 我认为这会有所帮助stackoverflow.com/questions/3976514/…
  • 感谢 bmavus。我不能使用指定为解决方案的 java -cp 命令,因为类路径中有许多 jar 文件必须在命令行中给出。以前,如果 jar 中只有一个主类文件,则可以使用 java -jar indexer-1.0.0-SNAPSHOT.jar 运行它。寻找一些类似的命令。
  • 我不确定也没有尝试过,但你有没有尝试过类似 java -cp myjar.jar .MyClass
  • Yes.Get java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext

标签: java maven maven-plugin executable-jar maven-assembly-plugin


【解决方案1】:

您应该运行生成的工件(第一个可运行,第二个可运行)而不是原始工件。 如果您使用“finalName”标签,那么原始工件将不会被修改,并且将创建新的 jar,如plugin documentation中所述

运行

java -jar first-runnable.jar com.test1

java -jar second-runnable.jar com.test1

【讨论】:

    猜你喜欢
    • 2014-08-24
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 2021-10-01
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多