【问题标题】:no main manifest in maven jarMaven jar 中没有主要清单
【发布时间】:2019-01-27 13:11:55
【问题描述】:

我已经用mvn clean install 构建了this project。现在我有一个.jar 文件,但我无法使用它:

λ java -jar flyway-commandline-xxx.jar
no main manifest attribute, in flyway-commandline-xxx.jar

我错过了什么?

【问题讨论】:

    标签: java maven flyway


    【解决方案1】:

    一个可执行的 jar 需要一个“清单文件”——它位于 jar 内的META-INF/MANIFEST.MF

    您可以使用 Maven Assembly 插件来生成符合以下要求的清单文件:

    ...
    <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.5.5</version>
        <configuration>
            <archive>
                <manifest>
                    <mainClass>dk.tbsalling.ais.cli.AisCli</mainClass>
                </manifest>
            </archive>
            <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
        </configuration>
        <executions>
            <execution>
                <id>make-assembly</id>
                <phase>package</phase>
                <goals>
                    <goal>single</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    ...
    

    MainClass(在清单文件中引用)是包含main(...)-方法的类,在您执行 jar 时调用。

    您可以查看 https://github.com/tbsalling/aiscli/blob/master/pom.xml 以获得完整的工作示例。

    【讨论】:

    • 感谢这项工作!你知道我怎样才能为 .tar.gz 实现同样的效果吗?错误:“无法找到或加载主类 org.xx.xx.Main”
    • 不客气。我不确定你对 .tar.gz 是什么意思?
    • 全新安装后,我有一个 jar(现在可以使用)和一个 .tar.gz。但是当我使用这个 tar.gz 时,我遇到了错误:无法找到或加载主类“name-of-my-main-class”
    • 但是你为什么要“java -jar app.tar.gz”而不是“java -jar app.jar”?
    • 不幸的是,这对我不起作用。同样旧的没有明显的错误。现在有不同的方法吗?
    猜你喜欢
    • 1970-01-01
    • 2021-05-29
    • 2019-07-19
    • 2022-12-23
    • 2015-10-01
    • 2020-07-28
    • 2020-12-10
    • 2018-02-10
    相关资源
    最近更新 更多