2015-07-22 2 views
-2

У меня вопрос с новичком по java; не удалось правильно установить путь к классам. Мне не хватает чего-то очень элементарного и тривиального.Невозможно правильно установить путь Java-класса

У меня есть файл в банке. foo.jar, в e: \ bar.

Это работает из командной строки, когда текущий каталог E: \ бар

java -jar foo.jar <params> 

Когда я изменить каталог на адрес :, он начинает бросать класс не найден исключения. Поэтому я устанавливаю -cp для указания пути к классу. Все, что я пытался до сих пор, она не смогла работать

java -cp ".;e:/bar/*;e:/bar/lib/*" -jar bar/foo.jar <params> 
java -cp "." -jar bar/foo.jar <params> 
.... 

Я всегда получаю это исключение:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/httpclient/MultiThreadedHttpConnectionManager 
     at java.lang.Class.forName0(Native Method) 
     at java.lang.Class.forName(Unknown Source) 
     at org.apache.axis.utils.ClassUtils$2.run(ClassUtils.java:187) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at org.apache.axis.utils.ClassUtils.loadClass(ClassUtils.java:171) 
     at org.apache.axis.utils.ClassUtils.forName(ClassUtils.java:112) 
     at org.apache.axis.deployment.wsdd.WSDDTargetedChain.makeNewInstance(WSDDTargetedChain.java:196) 
     at org.apache.axis.deployment.wsdd.WSDDDeployableItem.getNewInstance(WSDDDeployableItem.java:310) 
     at org.apache.axis.deployment.wsdd.WSDDDeployableItem.getInstance(WSDDDeployableItem.java:296) 
     at org.apache.axis.deployment.wsdd.WSDDDeployment.getTransport(WSDDDeployment.java:470) 
     at org.apache.axis.configuration.FileProvider.getTransport(FileProvider.java:282) 
     at org.apache.axis.AxisEngine.getTransport(AxisEngine.java:283) 
     at org.apache.axis.client.AxisClient.invoke(AxisClient.java:179) 
     at org.apache.axis.client.Call.invokeEngine(Call.java:2564) 
     at org.apache.axis.client.Call.invoke(Call.java:2553) 
     at com.ideas.jws.gftservice.GFTMessenger.sendMessage(GFTMessenger.java:1 
+0

С тех пор, как окна начали использовать '/' в качестве разделителя каталогов вместо '\'? – zubergu

+0

@zubergu Либо один работал с 15 лет назад (если не больше). – immibis

+0

Я бы порекомендовал вам использовать eclipse для экспорта Java-проекта в сочетании с JAR-файлами зависимостей, тогда вам не нужно устанавливать classpath вообще, Refer this http://stackoverflow.com/questions/11033603/how-to-create -a-jar-with-external-libraries-included-in-eclipse –

ответ

0

-cp не работает с -jar.

Если вы знаете имя основного класса, то вы можете работать вокруг него, не используя -jar:

java -cp ".;e:/bar/*;e:/bar/lib/*;bar/foo.jar" main.class.name.Here <params> 
+0

Спасибо. Просто попробовал это. Еще одна и та же ошибка. – Amit

0

Как банку приложение зависит от конкретного набора банок, одна обычная практика должна иметь:

distribution 
├─ myapp.jar 
└─ lib 
    ├─ libaaa-1.2.3.jar 
    └─ libbbb-2-3-4.jar 

В META-INF/MANIFEST.MF из приложения банка один часто генерирует Class-Path: ... записи.

Тогда вы можете запускать только приложение foo.jar.

Чтобы автоматизировать такие зависимости, я предпочитаю использовать maven. (gradle популярный тоже.)

+0

Foo, jar, который я получил от третьего лица, находится в этом формате. foo.jar, а затем папку lib. Однако файл META-INF отсутствует. – Amit

+0

Я надеялся, что это нечто тривиальное, что мне не хватает. Конечно, мне не нужно прыгать через обручи, чтобы запустить базовую программу Java. – Amit

Смежные вопросы