У меня есть Maven-проекта, который создает jar-файл и копирует все зависимости в папке целевой/Либ. Я хочу, чтобы выполнить этот проект на клиента's машина (для Windows). Итак, я скопировал
myproject.jar в папке c:\xyz и все зависимости в папке C:\xyz\lib
. Как я могу выполнить этот проект с клиент'команда s подскажешь?
Я пытался использовать `Ява -СР Либ*.Джа-Джа myproject.jar " с " папку c:\xyz но он выдает следующее сообщение об ошибке.
Exception in thread "main" java.lang.NoClassDefFoundError: lib\commons-codec-1/3/jar
Caused by: java.lang.ClassNotFoundException: lib\commons-codec-1.3.jar
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: lib\commons-codec-1.3.jar. Program will exit.
Я думаю, что если я указать все зависимости в classpath (как Ява -СР lib\dep1.jar;dep2.jar`), это позволит избавиться от проблемы, но я не'т хотим сделать это как у меня 40 библиотек уже и она может вырасти в будущих выпусках. Есть ли лучший способ сделать это?
Нельзя использовать -банк
и -ПС
в командной строке - смотрите в документации Java](http://docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/java.html#-jar), которая говорит, что если вы используете -банк
:
файл jar является источником всех классов пользователей и другие параметры пользователя путь Class игнорируются.
Вы могли бы сделать нечто подобное:
Ява -СР Либ\*.банку;. мой проект.MainClass
Обратите внимание на ;.
в аргументе -СР
, чтобы обойти командной строке Java ошибка. Также, обратите внимание, что это версия для Windows команды. Разделитель пути в Unix :
.
С использованием Java 1.7, на Unix -
java -cp myjar.jar:lib/*:. mypackage.MyClass
На Windows вам нужно использовать ';' вместо ':' -
java -cp myjar.jar;lib/*;. mypackage.MyClass
Пусть Мэйвен создать пакетный файл, чтобы запустить приложение. Это самый простой способ для этого.
Вы можете использовать appassembler-Maven-плагина Для таких целей.
Независимо от операционной системы ниже, команда должна работать:
java -cp "MyJar.jar;lib/*" com.mainClass
Всегда используйте цитаты и обратите внимание, что *Либ/.банку** не будет работать.
Вы можете используете Maven-сборка-плагин, вот пример с официального сайта: https://maven.apache.org/plugins/maven-assembly-plugin/usage.html
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>your main class</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
возможным решением могло бы быть
создайте пакетный файл
там делать петлю на папки lib все файлы внутри нее и установить каждый unside lib-файл в classpath
после этого запустите банку
источник для петли в пакетный файл для получения информации о циклах
Я бежал в ту же проблему, но сумел пакет со всеми зависимостями в мой jar-файл с помощью Maven в тени плагин][1]
[1]: http://www.avajava.com/tutorials/lessons/how-do-i-build-a-jar-file-that-contains-its-dependencies.html на "Мэйвен тени электросети и"
Есть несколько вариантов.
Самый простой, скорее всего, старпома плагин.
Вы также можете создать jar, содержащий все зависимости с помощью сборка плагинов.
Наконец, вы можете создать файл с classpath в него, используя зависимость:цель, путь к классу`.
Это не будет работать Ява -СР Либ\*.Джа-Джа myproject.jar
. Вы должны положить его в банку, банку.
Так что в случае commons-codec-1.3.jar
.
`Ява -СР lib/commons-codec-1.3.jar;lib/next_jar.jar и так далее.
Другим решением может быть ввод банок в каталог ВН от вашего JRE. Это нормально, если вы используете автономную версию JRE. Если вы используете тот же самый JRE для запуска более одного приложения я <б>не</б> рекомендую делать это.