【问题标题】:Eclipse built-in jar export option vs Maven assembly pluginEclipse 内置 jar 导出选项 vs Maven 程序集插件
【发布时间】:2018-12-25 04:10:17
【问题描述】:

我使用 IntelliJ IDEA 生成带有 maven-assembly-plugin 的 jar 文件。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.1.0</version>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <archive>
            <manifest>
                <mainClass>test.LeanFTest</mainClass>
            </manifest>
        </archive>
        <finalName>${project.artifactId}-fatjar-${project.version}</finalName>
        <appendAssemblyId>false</appendAssemblyId>
    </configuration>
</plugin>

它不起作用,它在执行过程中不断询问依赖关系。我无法使用 jar 文件,所以我将项目导入 Eclipse 并使用内置的 jar 导出选项。这个罐子工作正常。我找不到这些 jar 文件之间的区别。

【问题讨论】:

  • 尝试运行 jar 时遇到什么错误?
  • @y.bedrov :我收到有关缺少依赖项的错误消息。
  • 您需要在问题本身中逐字发布错误消息。另外,你能创建一个MCVE 吗?这将帮助我们重现您的问题。
  • @defaultlocale :没有任何确切的错误消息,它只是不断地询问依赖关系。
  • @plaidshirt 啊,这更复杂,我明白了。请将此解释添加到问题本身。您还可以提供一个 [redacted] maven 输出来演示究竟发生了什么。

标签: java eclipse intellij-idea jar


【解决方案1】:

原因可能是 Eclipse 在清单文件中生成了“Class-Path:”条目。 尝试通过添加以下内容来更新您的 .pom 文件中的程序集 conf(按心脏,未检查):

<addClasspath>true</addClasspath>

【讨论】:

    【解决方案2】:

    默认情况下,maven-assembly-plugin 不会捆绑您自己的 jar 独立运行所需的所有依赖项。

    所以你需要在插件配置下添加这个:

    <descriptorRefs>
        <descriptorRef>jar-with-dependencies</descriptorRef>
    </descriptorRefs>
    

    结果,插件标签变成:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>3.1.0</version>
        <executions>
            <execution>
                <id>make-assembly</id>
                <phase>package</phase>
                <goals>
                    <goal>single</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <archive>
                <manifest>
                    <mainClass>test.LeanFTest</mainClass>
                </manifest>
            </archive>
            <finalName>${project.artifactId}-fatjar-${project.version}</finalName>
            <appendAssemblyId>false</appendAssemblyId>
            <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef> <!-- the secret -->
            </descriptorRefs>
        </configuration>
    </plugin>
    

    你可以运行:

    java -jar path/to/LeanFTest.jar
    

    直接运行程序。

    【讨论】:

      猜你喜欢
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-14
      • 2012-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多