Как запустить проекты Ceylon Eclipse из терминала?

Я написал простую программу Hello World с плагином Ceylon Eclipse:

Снимок экрана Ceylong EclipseВот исходный код, если кто-то хочет быстро воспроизвести проблему:

shared void main() {
    String omg = (process.arguments.first else "nothing");
    print("You wrote ``omg``, you silly programmer!");
}

Теперь я могу нормально запустить эту программу из Eclipse. Но как мне запустить его из терминала?

У меня не установлены инструменты командной строки Ceylon, и я бы предпочел, чтобы они оставались такими. Когда я даю свою программу другим людям, я также не хочу, чтобы они устанавливали Ceylon.

Кажется, есть только один файл класса:

~/workspace/saloon $ find . -type f -name "*.class"
./.exploded/main_.class

Если я попытаюсь запустить это, я получу:

~/workspace/saloon/.exploded $ java main_
Exception in thread "main" java.lang.NoClassDefFoundError: ceylon/language/process_
    at main_.main(main.ceylon)
Caused by: java.lang.ClassNotFoundException: ceylon.language.process_
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 1 more

Проект Eclipse, похоже, не зависит ни от каких .jar файлов, только от одного .car файла, но java не работает с .car файлами. Запускать проекты Scala Eclipse из терминала очень легко, если предоставить соответствующие .jar файлы.

Итак, как мне запускать проекты Ceylon Eclipse из терминала через java? Или это невозможно?


person fredoverflow    schedule 22.02.2015    source источник


Ответы (1)


Ну, есть два возможных ответа в зависимости от того, сколько работы вы готовы сделать.

Мой первый ответ будет: вы не можете, вам нужно установить Ceylon. Потому что Ceylon — это не просто программа с красивым новым синтаксисом, работающая на JVM. Это платформа, у нее есть собственные библиотеки и модульная система, которая будет загружать зависимости на лету и т. д. Для того, чтобы это работало, вам нужно больше, чем просто скомпилированный код.

После установки инструментов CLI вы запустите свою программу, используя: ceylon run <name-of-your-module>

Мой второй ответ: если вы действительно хотите иметь возможность работать независимо от платформы Ceylon и готовы отказаться от инструментов и модульной системы и т. д., и готовы пройти через сбор необходимых зависимостей и их распространение вместе с вашей программы, вы можете использовать команду ceylon classpath <name-of-your-module>, чтобы получить список всех зависимостей, которые использует ваша программа.

Затем вы можете запустить его, используя точку входа com.redhat.ceylon.compiler.java.runtime.Main.

Подробное объяснение этого можно найти здесь на веб-сайте: http://www.ceylon-lang.org/documentation/1.1/reference/interoperability/ceylon-on-jvm/

person Quintesse    schedule 23.02.2015
comment
Большое спасибо за ответ! После переименования метода main() в run() работает команда ceylon run. Команда ceylon classpath выводит небольшой текст. Сообщение Module com.redhat.ceylon.dist not found in the following repositories вызывает беспокойство? Кроме того, в выводе есть два файла .car, могу ли я просто их игнорировать? - person fredoverflow; 23.02.2015
comment
Если вы используете параметр командной строки --run, вам не нужно называть функцию run. - person Gavin King; 23.02.2015
comment
@GavinKing Есть ли способ сократить количество зависимостей для этого простого цейлонского проекта? Здесь приведены зависимости в удобной для чтения форме. Я даже не могу удалить компилятор JavaScript без исключения :-( - person fredoverflow; 23.02.2015