Вы используете либо -jar
, либо -cp
, вы не можете комбинировать их. Если вы хотите поместить дополнительные JAR в classpath, тогда вы должны либо поместить их в основной манифест JAR, а затем использовать java -jar
, или вы поместите полный путь к классам (включая основной JAR и его зависимости) в -cp
и назовите основной класс явно в командной строке
java -cp 'MyProgram.jar:libs/*' main.Main
(Я использую синтаксис dir/*
, который сообщает команде java
добавлять все .jar
файлы из определенного каталога в путь к классам. *
должен быть защищен от расширения оболочкой, поэтому я использовал одинарные кавычки.)
Вы упомянули, что используете Ant, для альтернативного манифеста, вы можете использовать ant <manifestclasspath>
после после копирования зависимостей, но до построения JAR.
<manifestclasspath property="myprogram.manifest.classpath" jarfile="MyProgram.jar">
<classpath>
<fileset dir="libs" includes="*.jar" />
</classpath>
</manifestclasspath>
<jar destfile="MyProgram.jar" basedir="classes">
<manifest>
<attribute name="Main-Class" value="main.Main" />
<attribute name="Class-Path" value="${myprogram.manifest.classpath}" />
</manifest>
</jar>
При этом java -jar MyProgram.jar
будет работать правильно, и будет включать все файлы [J13] JAR в пути к классам.