如何使用 maven 将 rt.jar 嵌入到我的 WAR 中

发布于 2024-12-08 06:40:55 字数 99 浏览 1 评论 0原文

如何使用 Maven 将 JRE 库之一(例如 rt.jar)嵌入到我的 WAR 中?

有没有 Maven 插件/命令可以做到这一点?

How can I embed one of the JRE libraries (say, rt.jar) into my WAR using Maven?

Is there a maven plugin/command to do so?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

謸气贵蔟 2024-12-15 06:40:55

rt.jar 文件放入 WAR 文件中不会导致 Java 使用它。 Web 容器的类加载器应始终在查看 Web 应用程序中的 JAR 之前尝试系统类加载器,并且系统类加载器将使用启动类路径上的 rt.jar;即位于 JRE 安装目录中的那个。

这样也好。如果 Java 运行时使用了您的 rt.jar,它可能会陷入混乱。 rt.jar 中的代码可能会尝试调用未在 Java 可执行文件中实现的本机方法,或者可能调用其行为和/或签名已以不兼容方式更改的内部方法。


如果您打算这样做来“修复”类库中的某些行为,我的建议是:

  1. 不要这样做......而是找出解决方法。
  2. 如果您必须这样做,那么可以通过检查 OpenJDK 源代码、修补“bug”、构建新的 JDK/JRE 并将其用作您的 JRE 来实现。

Putting an rt.jar file into your WAR file is not going to cause Java to use it. The web container's classloader should always try the system classloader before looking at the JARs in your webapp, and the system classloader will use the rt.jar on the boot classpath; i.e. the one that is in the JRE installation directory.

This is just as well. If the Java runtime used your rt.jar it could get into an awful mess. Code in your rt.jar could try to make calls to native methods that are not implemented in the Java executable, or it could make calls to internal methods whose behavior and/or signatures have changed in an incompatible way.


If you are planning to do this to "fix" some behavior in the class library, my advice would be:

  1. Don't do it ... figure out a workaround instead.
  2. If you have to do it, then do it by checking out the OpenJDK sources, patching the "bug", building a new JDK / JRE and using that as your JRE.
世界如花海般美丽 2024-12-15 06:40:55

我认为这不是一个好主意。 rt.jar 是 JRE 的一部分,最好分开保存。

I don't think that's a good idea. rt.jar is part of your JRE and is best kept separate.

緦唸λ蓇 2024-12-15 06:40:55

正如adarshr上面已经指出,提供您自己的 JRE jar 不是一个好主意

如果您需要包含在 Maven 存储库中找不到的其他 jar,您可以按照以下步骤添加下载的 jar:

  1. 将 rt.jar 放入 Maven 本地存储库,例如

    mvn install:install-file -Dfile=myjar.jar -DgroupId=some.group -DartifactId=someartifact Dversion=1.0 -Dpackaging=jar

  2. 在 pom.xml 上放置对此 rt.jar 的依赖

    <代码><依赖关系>;
    some.group;
    someartifact
    <版本>1.0
    <范围>运行时

  3. 构建工件时,someartifact.jar 将包含在其中。

As adarshr above has already pointed out, it's not a good idea to provide your own JRE jars.

Just in case you need to include some other jar you don't find on the maven repositories, you can add downloaded jars following these steps:

  1. Put rt.jar in the maven local repository, with for instance

    mvn install:install-file -Dfile=myjar.jar -DgroupId=some.group -DartifactId=someartifact Dversion=1.0 -Dpackaging=jar

  2. Place a dependency to this rt.jar on the pom.xml

    <dependency>
    <groupId>some.group</groupId>
    <artifactId>someartifact</artifactId>
    <version>1.0</version>
    <scope>runtime</scope>
    </dependency>

  3. When building the artifact, someartifact.jar will be included in it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文