- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
所以我是 Java EE 的新手,我很难理解 Java 部署文件何时、何地以及为何与它们的依赖项打包在一起。
假设我将我的项目构建到 myapp.jar 中,它依赖于 fizz.jar、buzz.jar 和 JODA (joda-time-2.0.jar
)。
我听说默认的类加载器不会将 jar 打包到其他 jar 中,所以我必须假设如果我从 Ant 调用一个 jar 任务,那么默认的类加载器将被调用并且 myapp.jar 将在没有这 3 个依赖项的情况下创建。
这是因为人们的想法是在容器或其他系统中部署 main
-less jar 以在运行时提供其需求吗?如果不是,那么 myapp.jar 如何正确运行?
可执行 jar 包呢?要满足,这些必须不同于main
-less jar,因为它们是独立单元,对吧?这意味着他们需要将所有依赖项打包在一起,对吧?
最后但并非最不重要的一点是,那些依赖于 jars 的 jars 等等。 (即巨大的依赖图)?
我想所有这些问题都可以归纳如下:
这些问题的答案实际上将澄清我在 Java 基础知识方面遇到的很多问题,因此我们将不胜感激任何输入/帮助!谢谢
最佳答案
Jar 不知道其他 jar(除非借助 Maven 等工具)。 jar 的相互依赖完全由类加载器解决。我强烈建议拥有 some idea about classloaders .
为了解决您的问题,
不可执行的 jar 背后的想法是,它将以这样一种方式运行,即它知道在运行时要查找其依赖项的类路径吗? (因此不需要与其依赖项一起打包)?
可执行 jar 背后的想法是它是一个独立的单元并且应该与其依赖项一起打包吗?
如果我对上面问题 #1 的断言是正确的,那么这样的类路径配置是如何发生的?这些设置是否存储在 jar 中(例如 list 中)?否则,JRE 如何知道在运行时在哪里搜索特定的 jars 依赖项?
简而言之,它是拉动所有线程的类加载器。它在标准位置查找所有相关的 jar。 This link很好地描述了独立应用程序和已部署(在某些容器中)中的类加载器如何工作。
关于部署概念 : Packaging JAR Dependencies, 时间和原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7473260/
我正在尝试使用 JAXB 从 XSD 生成 java 类。 XSD 是我公司的官方 xsd,因此我无法仅为我的项目修改它们。在该网站上进行了数百次尝试和搜索后,我决定直接提出问题。 我的 XSD 中有
我已经了解了以下链接中的详细信息,但仍然存在何时使用哪个文件的问题?https://docs.npmjs.com/files/package-lock.json 最佳答案 包.json 包含项目的相关
当我在 centos 上运行命令 rpmbuild -bb mypackage.spec 时,出现错误 error: Package already exists: %package debuginf
my.packages 是 src 目录中的自定义原型(prototype)包。 Plone 实例中的数千个项目与其类型一起添加。我想将包重命名为 my.package。通过简单地卸载 my.pack
根据 javadoc 规范,我在相关包的根目录中放置了一个名为 package-info.html 的文档文件。但是,当我在该文件夹上运行 Doxygen 时,不会拾取该文件中的文档。我如何告诉 Do
我已经定义了如下的包: (defpackage :thehilariouspackageofamirteymuri (:nicknames ampack amir teymuri) (:use
我正在思考这个问题: > .packages() > (.packages()) [1] "stats" "graphics" "grDevices" "utils" "datase
我在内存中有一个 System.IO.Packaging.Package(它是一个 WordprocessingDocument)并且想将它流式传输到浏览器以保存它。 Word 文档已被基于 MVC
即使这是我不常发现的东西,在成员之前注释/* package*/的原因是什么? /* package */ final void attach(Context context) { atta
我正在开发我的应用程序,但在添加包以便导入它时,我总是收到此错误。 error: type 'Package.Dependency' has no member 'Package' 这是我的 Pack
install.packages("data.table") trying URL 'https://cran.rstudio.com/bin/macosx/el-capitan/contrib/3.
放置手动创建的插件的最佳位置是什么: a) C:\Users\{UserName}\AppData\Roaming\Sublime Text 3\Packages 或 b) C:\Users\{Use
这是一个有趣的 Perl 行为。 (至少对我来说 :) ) 我有两个包 PACKAGE1 和 PACKAGE2,它们导出具有相同名称的函数 Method1()。 由于将有如此多的包将导出相同的功能,使
package-archives (("marmalade" . "http://marmalade-repo.org/packages/") ("gnu" . "http://elpa.gnu.or
任何人都可以让我知道 package-lock.json 文件的确切用途吗? 尽管许多人提到它用于查看版本化依赖树。 寻找简单易行的解释。 提前致谢。 最佳答案 npm install使用此文件来确保
Python documentation说 Consider this code: import sound.effects.echo import sound.effects.surround fr
我在 ubuntu 上运行 VPS: Distributor ID: Ubuntu Description: Ubuntu 14.04.5 LTS Release: 14.04 C
我有这样一个结构 $ tree -h . ├── [1.0K] myproj │ ├── [ 0] index.py │ ├── [ 0] __init__.py │ └──
我正在尝试解压 System.IO.Packaging.Package我从网络服务器收到的。也就是说,我正在使用 System.IO.Packaging.Package.Open(Stream)方法并
关于 package.json 文件中的@types 依赖项,我有一个愚蠢的问题: 在下面的 URL 中解释了应该安装的类型作为运行时依赖 npm install --save @types/loda
我是一名优秀的程序员,十分优秀!