あなたが言う時
子プロセスはserver/libディレクトリからクラスパスを取得します
これはあなたの管理下にあるプロセスですか?親プロセスがクラスパスを次のように指定する場合
server/lib/*
(つまり、リテラル*
)次に、ターゲットjava
プロセスはディレクトリ自体のjarファイルを列挙します。lib
これらはすべてクラスパスで名前を付ける必要はありません。
ただし、親プロセスが値server/lib/*.jar
を作成するために明示的に列挙している場合は、JARが「実行可能」でない場合でも、JARマニフェスト内のが有効-cp
になるという事実を利用できます。Class-Path
このようなスタンザを使用して、マニフェストのみの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>
myapp-manifest.jar
これにより、マニフェストに含まれるという名前のJARファイルが生成されます
Class-Path: myapp/file1.jar myapp/file2.jar ... myapp/file300.jar
このファイルをserver/lib
新しいディレクトリに、300の依存関係を新しいディレクトリに配置しserver/lib/myapp
ます。これで、生成-cp
されたファイルには1つのファイル()のみが含まれますが、結果のJavaプロセスでは300個のJARファイルmyapp-manifest.jar
がすべて使用可能になります。myapp