可执行的 Jar 格式

可执行的 Jar 格式

Java 不提供任何标准方法来加载嵌套的 jar 文件(即,本身包含在 jar 中的 jar 文件)。如果您需要分发可以从命令行运行而无需解包的独立应用程序,这可能会出现问题。

为了解决这个问题,许多开发人员使用“阴影”罐子。带阴影的 jar 将所有 jar 中的所有类打包到一个“uber jar”中。带阴影的 jar 的问题是很难看出哪些库实际上在您的应用程序中。如果在多个 jar 中使用相同的文件名(但内容不同),也可能会出现问题。Spring Boot 采用了不同的方法,让您实际上可以直接嵌套 jar。

1.1。可执行 Jar 文件结构

Spring Boot Loader 兼容的 jar 文件应按以下方式构造:

例子.jar

|

+-元信息

| +-清单.MF

+-组织

| +-springframework

| +-启动

| +-装载机

| +-

+-引导-INF

+-类

| +-我的公司

| +-项目

| +-YourClasses.class

+-lib

+-dependency1.jar

+-dependency2.jar

应用程序类应放置在嵌套BOOT-INF/classes目录中。依赖项应放置在嵌套BOOT-INF/lib目录中。

1.2. 可执行的战争文件结构

与 Spring Boot Loader 兼容的 war 文件应按以下方式构建:

例子.war

|

+-元信息

| +-清单.MF

+-组织

| +-springframework

| +-启动

| +-装载机

| +-

+-WEB-INF

+-类

| +-com

| +-我的公司

| +-项目

| +-YourClasses.class

+-lib

| +-dependency1.jar

| +-dependency2.jar

+-lib-提供

+-servlet-api.jar

+-dependency3.jar

依赖项应放置在嵌套WEB-INF/lib目录中。运行嵌入式时需要但部署到传统 Web 容器时不需要的任何依赖项都应放在WEB-INF/lib-provided.

1.3. 索引文件

Spring Boot Loader 兼容的 jar 和 war 档案可以在BOOT-INF/目录下包含其他索引文件。classpath.idx可以为 jars 和 wars 提供一个文件,它提供了将 jars 添加到类路径的顺序。该layers.idx文件只能用于 jar,它允许将 jar 拆分为逻辑层以创建 Docker/OCI 映像。

索引文件遵循与 YAML 兼容的语法,因此它们可以很容易地被第三方工具解析。但是,这些文件不会在内部被解析为 YAML,它们必须完全按照下面描述的格式编写才能使用。

1.4. 类路径索引

类路径索引文件可以在BOOT-INF/classpath.idx. 它提供了一个 jar 名称列表(包括目录),按照它们应该添加到类路径的顺序。每行必须以破折号空格 ( "-·") 开头,并且名称必须用双引号括起来。

例如,给定以下 jar:

例子.jar

|

+-元信息

| +-...

+-引导-INF

+-类

| +...

+-lib

+-dependency1.jar

+-dependency2.jar

索引文件如下所示:

-“引导-INF/lib/dependency2.jar”

-“引导-INF/lib/dependency1.jar”

1.5。图层索引

图层索引文件可以在BOOT-INF/layers.idx. 它提供了层列表和应包含在其中的 jar 的部分。层是按照它们应该添加到 Docker/OCI 映像的顺序编写的。层名称写为带引号的字符串,前缀为破折号空格 ( "-·") 和冒号 ( ":") 后缀。层内容是文件或目录名称,以空格、破折号空格 ( "··-·") 为前缀的带引号的字符串编写。目录名以 结尾/,文件名不以 结尾。当使用目录名称时,这意味着该目录中的所有文件都在同一层中。

层索引的典型示例是:

- “依赖”:

-“引导-INF/lib/dependency1.jar”

-“引导-INF/lib/dependency2.jar”

- “应用”:

-“引导-INF/类/”

- “元信息/”

相关推荐