Возможно, я просто не понимаю, как работает вся переменная среды CLASSPATH при попытке найти файлы .jar в вашей системе. Я подумал, что если вы укажете это, вы сможете запускать файлы .jar с java почти так же, как вы можете запускать исполняемые файлы, которые находятся на вашем пути.

В моей системе есть исполняемый архив Java (файл .jar ), который я вставил в /usr/local/bin/gatk/ . Я добавил это в свой CLASSPATH через:

export CLASSPATH=/usr/local/bin/gatk/GenomeAnalysisTK.jar

Я думал, что это сделает файл .jar видимым для моей JVM. Когда я пытаюсь вызвать его с

java -jar GenomeAnalysisTK.jar
#Error: Unable to access jarfile .gatk/GenomeAnalysisTK.jar

Я могу вызвать его, установив абсолютный путь, например,
java -jar /usr/local/bin/gatk/GenomeAnalysisTK.jar , однако я бы не стал каждый раз вводить полный путь. Я прочитал многие из связанных уроков, но почему-то я не понимаю, как это правильно, и я не могу понять, что я делаю неправильно.

1 ответ1

3

CLASSPATH не предназначен для поиска банок. Он предназначен для поиска классов. Помещение jar в CLASSPATH означает, что java увидит классы внутри jar, но не сам jar.

Скорее всего, вам нужна оболочка сценария оболочки, запускающая jar.

Создайте текстовый файл, содержащий следующие строки:

#!/bin/sh
java -jar /usr/local/bin/gatk/GenomeAnalysisTK.jar

Сделайте файл исполняемым (предположим, вы назвали его GenomeAnalysisTK):

chmod +x GenomeAnalysisTK

Поместите этот файл в /usr/local/bin или ~/bin или куда угодно, если путь указан в вашем $PATH .

Отныне вы можете вызвать скрипт оболочки, и он запустит флягу. Больше не нужно связываться с CLASSPATH .


Альтернативно: с помощью jar в classpath вы можете запустить основной класс изнутри jar следующим образом:

java org.broadinstitute.sting.gatk.CommandLineGATK

Основной класс банки указан в файле META-INF/MANIFEST.MF внутри банки. Для получения дополнительной информации см. Статью о файлах jar в Википедии.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .