【问题标题】:Deploying a Maven one-jar deploys wrong artifact部署 Maven one-jar 会部署错误的工件
【发布时间】:2012-06-27 22:52:20
【问题描述】:

我正在尝试构建一个单 jar Java 实用程序。在this previous SO post,有人推荐使用onejar-maven-plugin 插件。我已经尝试过了,但我遇到的问题是插件(1.4.4)创建了一个带有 one-jar.jar 扩展名的新工件。因此,我的目标文件夹中有 2 个 jar,当我尝试安装和/或部署时,它会部署原始 jar(而不是一个 jar)。

我已经从目标文件夹运行了 one-jar.jar 工件,它完全按预期工作,所以我对此很满意。但是,如果我无法使用标准的 mvn deploy 命令语法正确部署它,则该插件不会真正按预期或按要求执行。

有没有办法正确构建 pom 配置以避免这个问题?

我当前的 pom 内容如下:

                <plugin>
                    <groupId>com.jolira</groupId>
                    <artifactId>onejar-maven-plugin</artifactId>
                    <version>1.4.4</version>
                    <executions>
                        <execution>
                            <configuration>
                                <mainClass>com.nbfg.cws.cs.lendingsimulationservice.Client</mainClass>
                                <onejarVersion>0.97</onejarVersion>
                                <attachToBuild>true</attachToBuild>
                            </configuration>
                            <goals>
                                <goal>one-jar</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>

运行mvn deploy时的Maven输出:

测试运行:0,失败:0,错误:0,跳过:0

[INFO]
[INFO] --- maven-jar-plugin:2.3.1:jar (default-jar) @ lss-client ---
[INFO]
[INFO] --- onejar-maven-plugin:1.4.4:one-jar (default) @ lss-client ---
[INFO] Using One-Jar to create a single-file distribution
[INFO] Implementation Version: 0.0.1-SNAPSHOT
[INFO] Using One-Jar version: 0.97
[INFO] More info on One-Jar: http://one-jar.sourceforge.net/
[INFO] License for One-Jar:  http://one-jar.sourceforge.net/one-jar-license.txt
[INFO] One-Jar file: C:\Dev\Eclipse Indigo\lssClient\target\lss-client-0.0.1-SNAPSHOT.one-jar.jar
[INFO]
[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ lss-client ---
[INFO] Installing C:\Dev\Eclipse Indigo\lssClient\target\lss-client-0.0.1-SNAPSHOT.jar to C:\Users\C61271B4\.m2\repository\com\cws\cs\lss\lss-client\0.0.1-SNAPSHOT\lss-client-0.0.1-SNAPSHOT.jar
[INFO] Installing C:\Dev\Eclipse Indigo\lssClient\pom.xml to C:\Users\C61271B4\.m2\repository\com\cws\cs\lss\lss-client\0.0.1-SNAPSHOT\lss-client-0.0.1-SNAPSHOT.pom
[INFO] Installing C:\Dev\Eclipse Indigo\lssClient\target\lss-client-0.0.1-SNAPSHOT.one-jar.jar to C:\Users\C61271B4\.m2\repository\com\cws\cs\lss\lss-client\0.0.1-SNAPSHOT\lss-client-0.0.1-SNAPSHOT-onejar.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.874s
[INFO] Finished at: Tue Jun 26 13:08:34 EDT 2012
[INFO] Final Memory: 21M/512M
[INFO] ------------------------------------------------------------------------

谢谢,

埃里克

【问题讨论】:

    标签: java maven jar executable


    【解决方案1】:

    根据文档,您应该添加可以解决问题的配置,以附加构建的 onejar 文件。

    <!-- Optional, default is false -->
    <attachToBuild>true</attachToBuild>
    

    要使用创建的工件,您需要通过选项为 onejar 添加插件定义的分类器:

    <!-- Optional, default is "onejar" -->
    <classifier>onejar</classifier>
    

    意思是说:

    <dependency>
      <groupId>..</groupId>
      <artifactId>..</artifactId>
      <classifier>onejar</classifier>
      <verison>x.y.z</version>
    </dependency>
    

    重要的是使用分类器。否则,您将获得原始工件(如您所述)。

    如果您希望有机会将生成的 onejar 用作主要工件(仅已部署),您应该为此目的使用 maven-shade-plugin。 onejar 插件的文档没有提供这样的选项。

    【讨论】:

    • 我查找了插件的文档,但似乎无法找到/理解 attachToBuild 的作用。我已经编辑了我的问题以包含日志输出。我没有注意到两个罐子都被部署了。有没有办法只部署onejar?
    • 此外,当我尝试将此工件包含在另一个项目中时,会包含错误的 jar; Maven 从 repo 下载并包含原始工件,而不是 -onejar.jar 工件,因为后者与 artifactId 不匹配。
    • 相应地更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 2011-12-26
    • 2019-01-26
    • 2014-01-31
    • 2012-05-19
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    相关资源
    最近更新 更多