当你说
子进程从 server/lib 目录中获取类路径
这是一个在你控制之下的过程吗?如果父进程要指定类路径,就像
server/lib/*
(即文字*
)然后目标java
进程将枚举lib
目录本身中的 jar 文件——它们并不都需要在类路径中命名。
但是,如果父进程显式枚举server/lib/*.jar
以构建-cp
值,那么即使 JAR 不是“可执行”,您也可以利用Class-Path
JAR 清单中的 in 生效这一事实。您可以使用这样的节来创建仅清单 JAR 文件
<!-- location of your 300 dependency JAR files, file1.jar ... file300.jar -->
<property name="lib.dir" location="lib" />
<fileset id="dependencies" dir="${lib.dir}" includes="*.jar" />
<pathconvert property="manifest.classpath" dirsep="/" pathsep=" "
refid="dependencies">
<map from="${lib.dir}" to="myapp" />
</pathconvert>
<jar destfile="myapp-manifest.jar">
<manifest>
<attribute name="Class-Path" value="${manifest.classpath}" />
</manifest>
</jar>
这将生成一个名为的 JAR 文件myapp-manifest.jar
,其清单包含
Class-Path: myapp/file1.jar myapp/file2.jar ... myapp/file300.jar
你把这个文件server/lib
和 300 个依赖项放到一个新目录server/lib/myapp
中。现在生成的-cp
将只包含一个文件 ( myapp-manifest.jar
),但生成的 java 进程将拥有所有 300 个myapp
JAR 文件。