maven 着色 jar:更改输出位置

2023-11-25

我在使用 Maven Shade 插件时遇到困难,因为我希望将我的着色 jar 安装到与父 pom 相同的文件夹中(而不是本地src/target目录)。

布局: maven_项目

guide/
   parent_pom.xml
projA/
   pom.xml
projB/
   pom.xml
   /target
      original-projB-0.0.3.jar
      projB-0.0.3.jar (shaded jar) 

我必须导出项目并使其他人更容易运行可执行 jar 我想将阴影 jar 重新定位到guide folder.

不幸的是,我尝试使用

<outputDirectory>/home/name/Desktop/maven_project/guide/</outputDirectory>    

但这只是将原始 jar 移动到目录中。

Question:关于如何将阴影罐子移到那里(甚至在此过程中删除原始罐子)有什么想法吗?


The Maven 阴影插件默认情况下替换构建生成的原始 jar 并创建其前缀为的副本original.

更换和搬迁可以通过配置outputDirectory, outputFile and finalName配置条目。

应用以下配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <executions>
                <execution>
                    <id>default-jar</id>
                    <phase />
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.4.3</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <finalName>${project.artifactId}-${project.version}-something</finalName>
                        <outputDirectory>../guide</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

We are:

  • 首先根据您的要求和指定禁用默认 jar 的生成这个专用的 SO Q/A
  • 然后配置Shade Plugin将其输出重新定位到上层guide文件夹(通过相对路径,更好的方法也建议@Tunaki)
  • Also configuring the finalName element in order to disable replacement (which also affects relocation, in the sense that also the (prefixed) original jar will be relocated). As per official documentation the finalName is

    着色的artifactId 的名称。如果您想更改本机工件的名称,您可以使用<build><finalName>环境。如果这设置为不同于<build><finalName>,不会执行文件替换,即使shadedArtifactAttached正在使用中。

因此,Maven 将仅在配置的位置生成阴影 jar。


另一种方法是使用outputFile配置条目,指定:

着色工件的输出文件的路径。设置此参数后,创建的存档既不会替换项目的主要工件,也不会附加它。因此,该参数导致参数finalName, 附有阴影Artifact,shadedClassifierName and createDependencyReducedPom使用时可以忽略。

因此,您可以将上面的配置更改为:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <executions>
                <execution>
                    <id>default-jar</id>
                    <phase />
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.4.3</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <outputFile>../guide/${project.artifactId}-${project.version}-shaded.jar</outputFile>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

并且具有完全相同的行为。


旁注:您实际上正在改变此处构建的行为。如果有人只从模块文件夹本身构建一个模块,他/她将无法在target文件夹,该文件夹将位于父文件夹上(有点令人惊讶)。


Update
应用上面的配置并仅从命令行调用 Shade 插件

mvn shade:shade

但你会遇到以下问题:

[INFO] --- maven-shade-plugin:2.4.3:shade (default-cli) @ test-addjar ---
[ERROR] The project main artifact does not exist. This could have the following
[ERROR] reasons:
[ERROR] - You have invoked the goal directly from the command line. This is not
[ERROR]   supported. Please add the goal to the default lifecycle via an
[ERROR]   <execution> element in your POM and use "mvn package" to have it run.
[ERROR] - You have bound the goal to a lifecycle phase before "package". Please
[ERROR]   remove this binding from your POM such that the goal will be run in
[ERROR]   the proper phase.
[ERROR] - You removed the configuration of the maven-jar-plugin that produces the main artifact.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

maven 着色 jar:更改输出位置 的相关文章

随机推荐

  • 组合谓词

    有什么方法可以组合谓词吗 可以说我有这样的东西 class MatchBeginning public binary function
  • EF4.3.1 中的 MaxLength 属性

    The type System ComponentModel DataAnnotations MaxLengthAttribute exists in both path packages EntityFramework 4 3 1 lib
  • 如何解决路径中的非法字符异常?

    我使用 XML 解析显示来自 URL 的图像 有些图像显示得很好 但有时我会遇到如下异常 索引 113 处的路径中存在非法字符 http www theblacksheeponline com party img thumbspps 123
  • 无法在java中实现A Star

    我一整天都在尝试让这个算法启动并运行 但我一辈子都做不到 我在网上阅读了很多教程 以及 AS3 javascript 和 C 的源代码 但我无法将我所看到的内容适应我自己的代码 我创建了一个 AStar 类 它有一个名为 Node 的嵌套类
  • 如何将命令行参数传递给嵌套脚本?

    注意 这不是将 args 发送到顶级脚本 而是发送到由that script 在我的 package json 中 当我调用直接采用命令行参数的脚本时 它可以工作 但是 当我调用一个调用其他脚本的脚本时 它不会将命令行参数传递给它 我该如何
  • 实例方法的示例? (爪哇)

    我仍在学习 Java 中的方法 并且想知道如何使用实例方法 我在想这样的事情 public void example String random 但是 我不确定这实际上是实例方法还是其他类型的方法 有人可以帮我吗 如果它不是静态方法 那么它
  • 使用 Xcode 5 和 Matlab R2013b 在 OS X 10.9 中编译 mexopencv

    我有兴趣使用Kota Yamaguchi 的 mexopencv 库在我的系统上具有以下规格 OS X 10 9 小牛队 Xcode 5 MATLAB 2013b OpenCV 通过 macports 安装到 opt local inclu
  • 如何准确过滤 RGB 值以实现色度键效果

    我刚刚读过this教程并尝试了这个例子 所以我从网上下载了一个视频来自己测试 我所要做的就是在 if 条件下调整 RGB 值 这是示例中的示例代码 computeFrame function this ctx1 drawImage this
  • Android Facebook 示例应用程序在安装 FB 应用程序后无法登录

    起初我以为这是我的应用程序 但在使用任何 FB 示例应用程序时我遇到了完全相同的问题 以 HelloFacebookSample 为例 它为您提供一个登录按钮 登录后会显示您的照片并允许您发布状态更新 如果我的手机上没有安装 FB 应用程序
  • 将 URL 设置为 SEO 友好标题,使用破折号而不是 ID

    我正在使用 AngularJS 创建一个文章页面 其中包含各个文章详细信息的链接 这些链接基于 ID 以确保它们是唯一的 但我希望 URL 是带有破折号的标题 对 SEO 用户友好得多 而不是 ID 这是 Angular 示例 其中产品详细
  • 如何使用球衣发送 NTLM 验证的帖子请求?

    我正在使用 Java 对 Sharepoint 2013 进行 REST API 调用 如何使用 jersey Rest 客户端连接到 sharepoint 2013 注意 目前我正在使用 apache http 组件和NTCredenti
  • Python 错误代码

    我有一个 python 脚本 它使用 subprocess Popen 运行另一个 python 脚本的多个实例 每个实例都在不同的文件上运行 我收集了 300 个文件 我通过此过程运行这些文件以进行测试 每次运行时 都会有随机数量的文件失
  • Docker 远程 API 过滤器已退出

    我在 Docker Remote API 文档中看到过滤器可用于过滤状态 但我不确定如何形成请求 https docs docker com reference api docker remote api v1 16 list contai
  • 比较 Java 中的字符、整数和类似类型:使用 equals 还是 ==?

    我想确定一下 Java 中的一些事情 如果我有一个字符 一个整数或一个长整型以及诸如此类的东西 我应该使用 equals 还是 就足够了 我知道对于字符串 不能保证每个唯一字符串只有一个实例 但我不确定其他装箱类型 我的直觉是使用 equa
  • 在 Chrome/Mac 上强制 DOM 重绘/刷新

    每隔一段时间 Chrome 就会错误地渲染完全有效的 HTML CSS 或者根本不渲染 通过 DOM 检查器深入研究通常足以让它认识到其方式的错误并正确重绘 因此可以证明标记是好的 在我正在从事的项目中 这种情况经常发生 并且可以预见 因此
  • Android:以阿拉伯格式显示数字

    如何以阿拉伯格式显示数字 所以 如果我有整数 1 2 3他们成为 将区域设置设置为阿拉伯语 埃及 NumberFormat nf NumberFormat getInstance new Locale ar EG nf format i
  • 计算一行中有多少个 MySQL 字段被填充(或为空)

    我需要组合一种方法 使我能够量化用户已填充一行中的多少个字段 例如 User Name Age Country Gender Height 1 Mike 34 USA Male 6 2 Bill 23 CA 5 3 Jane 31 USA
  • .pdbrc 文件中的断点命令

    我想将断点命令保存在 pdbrc 就像是 b 81 commands 1 pp foo attr1 pp foo attr2 end b 108 commands 2 pp bar attr1 pp bar attr2 end 这将自动设置
  • 如何正确处理 nil UIApplication.sharedApplication().keyWindow

    当 的时候viewDidLoad称为视图应该被加载 但我总是崩溃UIApplication sharedApplication keyWindow为零 我应该把我的代码放在哪里 以便在加载视图后调用它 而不是每次用户回来时调用它 因此我已排
  • maven 着色 jar:更改输出位置

    我在使用 Maven Shade 插件时遇到困难 因为我希望将我的着色 jar 安装到与父 pom 相同的文件夹中 而不是本地src target目录 布局 maven 项目 guide parent pom xml projA pom x