как установить аргумент для classpath - PullRequest
1 голос
/ 05 мая 2011

, чтобы запустить тесты, я должен задать большой список jar-файлов в качестве аргументов для classpath: -класс-путь a.var; b.jar; .... Есть ли другой способ указать библиотеки? например, можно ли задать файл в качестве аргументов, а файл содержит путь ко всем библиотекам пример : -classpath myFile.txt и myFile.txt содержит ../a.jar ../b.jar .. и т. д.

спасибо,

Ответы [ 5 ]

3 голосов
/ 05 мая 2011

Вы можете программно добавить новый путь к classpath:

String currentPath = System.getProperty("java.library.path");
System.setProperty( "java.library.path", current + ":/path/to/my/libs" );

// this forces JVM to reload "java.library.path" property
Field fieldSysPath = ClassLoader.class.getDeclaredField( "sys_paths" );
fieldSysPath.setAccessible( true );
fieldSysPath.set( null, null );

Вы можете добавить путь, поэтому нет необходимости перечислять все банки.Это изменяет classpath только для вашего экземпляра JVM, поэтому оно не повлияет на другие java-приложения.

Обновление:

: и / относятся к конкретной UNIX-библиотеке-путь и разделители пути к папке.Для мульти-ОС вы должны использовать «path.separator» и «file.separator» системные свойства .

2 голосов
/ 05 мая 2011

Начиная с Java 6, вы можете использовать подстановочные знаки в classpath, чтобы включить все jar-файлы в каталог. Смотри http://download.oracle.com/javase/6/docs/technotes/tools/windows/classpath.html.

2 голосов
/ 05 мая 2011

Начиная с Java 6, вы можете использовать подстановочные знаки в вашем classpath:

java -classpath 'lib/*'

Обратите внимание, что вы должны заключить в кавычку строку classpath, чтобы избежать расширения оболочки подстановочным знаком.

2 голосов
/ 05 мая 2011

Вы можете установить переменную среды CLASSPATH (используйте соответствующий синтаксис для вашей оболочки, например, bash , Windows XP и т. Д.).

Вы также можете создать своего рода файл профиля, который будет делать это для вас все время, например, .bashrc . Конечно, это будет влиять на каждый раз, когда команда java используется в этом профиле.

Если ваш основной класс находится в банке, вы также можете использовать манифест банки для установки пути к классу. У Sun / Oracle есть учебная страница по этому вопросу . Создайте файл с именем Manifest.txt. В этом файле добавьте строку:

Путь к классу: jar1-имя jar2-имя имя-каталога / jar3-имя

где различные jar1-name части - это настоящие банки на вашем пути к классам.

Затем создайте банку, используя:

jar cfm MyJar.jar Manifest.txt MyPackage / *. Class

Или Ant Jar Task с установленным атрибутом манифеста, либо используйте плагин Maven jar , либо, если ваша сборка работает, получите набор манифестов для банки.

Или продолжайте использовать --classpath, как и сейчас.

1 голос
/ 05 мая 2011

К обеденным тестам Я настоятельно рекомендую вам использовать Ant.

А в Ant есть элемент <classpath>, который позволяет вам указать «все банки в данном каталоге»:

<classpath>
  <pathelement path="${classpath}"/>
  <fileset dir="lib">
    <include name="**/*.jar"/>
  </fileset>
  <pathelement location="classes"/>
  <dirset dir="${build.dir}">
    <include name="apps/**/classes"/>
    <exclude name="apps/**/*Test*"/>
  </dirset>
  <filelist refid="third-party_jars"/>
</classpath>
...