当前位置: 首页 > 面试题库 >

Maven“阴影” JAR在文件名中带有“原始”前缀

姬熙云
2023-03-14
问题内容

我正在使用“ shade” Maven2插件来构建将所有Java依赖项捆绑在一起的整体式JAR。中的相关部分pom.xml非常简单:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>1.4</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <finalName>${project.artifactId}-${project.version}-SHADED</finalName>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>com.mypackage.MyClass</mainClass>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

但是,构建结果很奇怪。似乎两个文件实际上是由该Maven插件创建的:

myartifact-1.0.0-SHADED.jar  (zero bytes)
original-myartifact-1.0.0-SHADED.jar  (10 MB)

带有前缀“原始”的JAR文件已正确构建,并且功能正常。我想我可以将其重命名以删除该前缀,然后继续愉快地进行下去。

但是,我对“
shade”插件在这里可能发生的情况非常好奇。看起来“原始”文件是临时工作空间类型的东西,打算在过程结束时重命名,并且最终重命名根本没有完成。尽管没有明显的解释(例如文件系统权限等)。有人看过吗?


问题答案:

Maven的构建步骤将创建jar target/artifact-version.jar

然后,阴影插件运行。它通常将该jar重命名为target/original-artifact- version.jar,并为阴影JAR命名target/artifact-version.jar

但是,您正在配置Shade插件以使用其他名称。除非有充分的理由,否则我<finalName>将从您的配置中删除,并使用Shade插件想要给您的东西。



 类似资料:
  • 我的项目依赖于另一个项目的阴影JAR。另一个项目使用shade插件将一些的包中的所有类重新定位到。 这是意料之中的行为吗?有没有一种方法可以阻止这种传递阴影? 其他项目的阴影插件:

  • 我想在阴影罐子中记录maven工件在阴影罐子中的实际结果。 所有的包都被合并了,这使得很难仅仅通过查看JAR来确定到底有哪些工件进入了其中。 对于maven shade插件,这是完全可能的吗? 先谢谢你,菲尔。

  • 根据我的理解,包含/排除只是白名单/黑名单,所以我不能显式地强制包含一些没有包含在实际依赖列表中的内容。 为了获得更多的上下文,我有一个JAR依赖项,它包含一个资源,我只希望它包含在我的shade工件中,但是在类路径上使用该JAR会导致错误。 明确地说,我希望在一个调用中生成一个带有附加依赖项的阴影jar,以及一个没有附加依赖项的普通jar。

  • 以下部分显示了my pom.xml中shade插件的配置: 然而,一些被排除的文件(似乎??)被偷偷地放入输出jar文件中: 那么,阴影插件配置中有什么不正确的地方呢?

  • 我很难使用Maven Shade插件,因为我希望将我的带阴影的jar安装到与父pom相同的文件夹中(而不是本地目录)。 布局:maven_project 我必须导出项目,为了让其他人更容易运行可执行jar,我想将带阴影的jar重新定位到文件夹。

  • 我想通过SFTP将构建的jar和所有依赖项上传到我的Raspberry PI。因此,我尝试使用maven-deploy-plugin。 正如您已经看到的,上载的jar是一个被重命名的带阴影的jar 此外,我包含了wagon-ssh扩展,并定义了Raspberry PI: 但是,如果我执行mvn:deploy,maven只会将原始的-jar上传到Raspberry Pi的文件路径groupId、ar