如何使用 maven 将 rt.jar 嵌入到我的 WAR 中
如何使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
将
rt.jar
文件放入 WAR 文件中不会导致 Java 使用它。 Web 容器的类加载器应始终在查看 Web 应用程序中的 JAR 之前尝试系统类加载器,并且系统类加载器将使用启动类路径上的rt.jar
;即位于 JRE 安装目录中的那个。这样也好。如果 Java 运行时使用了您的 rt.jar,它可能会陷入混乱。
rt.jar
中的代码可能会尝试调用未在 Java 可执行文件中实现的本机方法,或者可能调用其行为和/或签名已以不兼容方式更改的内部方法。如果您打算这样做来“修复”类库中的某些行为,我的建议是:
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 thert.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 yourrt.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:
我认为这不是一个好主意。
rt.jar
是 JRE 的一部分,最好分开保存。I don't think that's a good idea.
rt.jar
is part of your JRE and is best kept separate.正如adarshr上面已经指出,提供您自己的 JRE jar 不是一个好主意。
如果您需要包含在 Maven 存储库中找不到的其他 jar,您可以按照以下步骤添加下载的 jar:
将 rt.jar 放入 Maven 本地存储库,例如
mvn install:install-file -Dfile=myjar.jar -DgroupId=some.group -DartifactId=someartifact Dversion=1.0 -Dpackaging=jar
在 pom.xml 上放置对此 rt.jar 的依赖
<代码><依赖关系>;
some.group ;
someartifact
<版本>1.0
<范围>运行时
构建工件时,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:
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
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>
When building the artifact, someartifact.jar will be included in it.