Как запустить файл класса kotlin и указать один или несколько файлов JAR библиотеки? - PullRequest
0 голосов
/ 11 июня 2019

Я ищу способ запустить файл стандартного класса, созданный Intellij для hello world, используя сборку gradle с kotlin-stdlib-1.3.11 в качестве единственной зависимости.

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

Простому файлу класса для 'hello world' необходим доступ к kotlin-stdlib-1.3.11.jar, и я ищу способ запустить файл класса и вручную указать jar-файлы, которые будут использоваться для удовлетворения зависимостей.

Я делаю заметки для членов команды, почему:

java HelloKt

в папке, в которой находится файл класса, должен выдать ошибку NoClassDefFoundError, а также посмотреть, как потом будет работать указание вручную «запустить класс, но также с библиотекой kotlin std».

Повторюсь, я не пытаюсь просто запустить программу. Я пытаюсь показать, как запустить стандартную библиотеку требуется для запуска файла класса.

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Как утверждает @gidds, да, речь идет о classpath.

Команда java HelloKt сообщает java, что класс для запуска - HelloKt, который Kotlin использует для предоставления содержащего класса для приложения с именем Hello, но эта команда не определяет, где находится код должен быть запущен. Код должен быть указан путем к классу. Если в текущем каталоге находится файл HelloKt.class, то '.' в качестве пути к классу позволяет найти класс HelloKt и запустить код, но он быстро умрет, поскольку хранилище 'kotlin-stdlib-1.3.11' как указанный в сборке Gradle, также должен быть доступен для предоставления классов для времени выполнения. так

java -cp ".";"<path to stdlib>\kotlin-stdlib-1.3.11.jar"

успешно запустит файл. Обратите внимание, что каждый jar-файл должен быть записью в classpath, просто иметь папку, содержащую jar-файл, недостаточно. На окнах ';' для разделения записей в Mac или Linux используйте ':'. Каждая запись может быть в кавычках, и будет необходимо, только если в пути есть специальные символы.

0 голосов
/ 11 июня 2019

Это примерно classpath .

Простой ответ - запустить kotlin вместо java, так как это автоматически добавляет поддержку Kotlin в classpath:

> kotlin HelloKt

Однако, если вам нужно запустить java, тогда вам нужно настроить classpath самостоятельно.

Справочная страница для java говорит:

Среда выполнения Java выполняет поиск класса запуска и других используемых классов в трех наборах местоположений: путь к классу начальной загрузки, установленные расширения и путь к пользовательскому классу.

Первые два являются частью установки Java и редко затрагиваются, поэтому вам нужно посмотреть путь к классам пользователей.

Вам нужно, чтобы он содержал kotlin-runner.jar и путь к вашему HelloKt.class файлу. Последний может просто быть . для текущего каталога; первое будет зависеть от того, где вы установили Kotlin. (Например, я установил его, используя Homebrew, и этот jar в настоящее время /usr/local/Cellar/kotlin/1.3.31/libexec/lib/kotlin-runner.jar.)

Справочная страница продолжается:

   -classpath classpath
   -cp classpath
          Specifies a list of directories, JAR archives, and ZIP  archives
          to  search for class files.  Class path entries are separated by
          colons (:). Specifying -classpath or -cp overrides  any  setting
          of the CLASSPATH environment variable.
           
          If -classpath and -cp are not used and CLASSPATH is not set, the
          user class path consists of the current directory (.).

Таким образом, есть два способа сделать это: либо установить переменную окружения $CLASSPATH перед запуском java:

> export CLASSPATH="/usr/local/Cellar/kotlin/1.3.31/libexec/lib/kotlin-runner.jar:."
> java HelloKt

Или передать -classpath или -cp флаг:

> java -cp /usr/local/Cellar/kotlin/1.3.31/libexec/lib/kotlin-runner.jar:. HelloKt

(Или, как вы говорите, вы можете создать jar-файл, который включает в себя как классы поддержки Kotlin, так и ваши собственные. Это, вероятно, лучший вариант, если вы собираетесь распространять его на машины, на которых может не быть установлен Kotlin. Но это не единственный вариант.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...