Создать .jar из скалы - PullRequest
       2

Создать .jar из скалы

8 голосов
/ 21 июля 2011

Я разрабатываю приложение на Eclipse с помощью Scala и хотел бы создать .jar. Я нашел tuto для этого, но он использует пакет scala.tools.nsc, и я не знаю, где я могу найти эту вещь.
Я тоже пытался сгенерировать .class, а затем с помощью команды jar cmf .... сгенерировать .jar, но когда я запускаю .jar, возникает ошибка. (NoClassFound)
С sbt я тоже пытался, но когда я компилирую свой проект, который работает с Eclipse, появляется много ошибок.

Кто-нибудь может мне объяснить, как я могу просто создать .jar с Eclipse или другими инструментами.

Ответы [ 5 ]

11 голосов
/ 22 июля 2011

Eclipse имеет встроенную опцию для создания исполняемых jar-файлов, но она хорошо спрятана.Также он не распознает сигнатуры main () в Scala, поэтому вам придется создать класс Java с методом main ().

  1. Создать класс Java с методом main (), которыйпросто перенаправьте вызов к вашему Scala-коду.

  2. Затем щелкните правой кнопкой мыши на только что созданном классе Java и выберите: Запуск от имени -> Приложение Java.Это создаст работоспособную конфигурацию, которая позже будет использоваться как часть вашего работоспособного фляги.

  3. Теперь вы готовы выкопать опцию финишного фляги из меню Eclipse: Файл ->Экспорт -> Java -> Запускаемый файл JAR

  4. В представленном диалоговом окне выберите Launch Configuration, которую вы создали ранее (на шаге 2), назовите свой jar (myapp.jar), выберите свою зависимостьПараметры экспорта и нажмите Готово.

  5. Jar будет создан в рабочем пространстве Eclipse по умолчанию.

  6. Запустите Jar с помощью строки: scalamyapp.jar

Ваш вопрос по поводу отсутствующих изображений: Eclipse требует обновления вручную при добавлении или удалении файлов.Щелкните правой кнопкой мыши свой проект и выберите «Обновить».

На этом учебное пособие по интуитивно понятному интерфейсу Eclipse завершено.

Примечание. Инструкции для Eclipse версии 3.6.2.

3 голосов
/ 21 июля 2011

Банки

Когда вы создаете банку из ваших классов, возможно, зависимости не включены в эту банку.При запуске этого jar вам нужно поместить jar, содержащий зависимости, в путь к классам (с ключом -cp в java).Наиболее важной зависимостью является банка scala-library.Конечно, знание того, что не найдено NoClassDefFound, поможет.

Sbt

При сборке с использованием sbt, возможно, отсутствуют зависимости, которые вы вручную добавили в проект Eclipse?(Примечание: я не использовал sbt).

Maven

Я обнаружил, что самый ясный и самый безболезненный способ - пойти с одним maven или, возможно, с maven + Intellij Idea(версия для сообщества бесплатна) + Плагин Scala.Работает очень гладко.

Для maven вам нужно немного адаптировать имеющийся архетип scala, поскольку библиотеки, на которые он ссылается, не являются самой последней версией, но, кроме того, это очень хорошо.

Вот pom.xml Я использую: https://gist.github.com/1096870

Используйте стандартную структуру папок maven (исходный корень - src / main / scala), а затем mvn package создает штраф в банке.

1 голос
/ 09 июня 2015

Используйте приведенные ниже шаги на время. Но это не полное решение проблемы. Лучше пойти на сборку sbt jar для комбинации Spark-Scala.Временное решение с использованием класса Java, вызывающего главный класс Scala. MainClass.java

public class MainClass {
    public static void main(String[] args) {
        SampleApp app=new SampleApp();
        app.main(args); }
}

SampleApp.scala

class SampleApp {
   def main(args: Array[String]) {  
     println("First Scala SampleApp")}  
}

Экспортируйте его как банку, используя обычный экспорт jav jar, выбравОсновной метод MainClass.назовите файл jar как Sample.jar. Запустите его в кластере, используя следующую команду:

/ spark / bin / spark-submit --class com.scala.MainClass SampleScala.jar

Вывод, который вы можете получить как: First Scala SampleApp

0 голосов
/ 03 мая 2018

Чтобы понять, что написал @Kumar Basapuram:

Создайте класс Java с именем "Wrapper.java".

package animals;
public class Wrapper {
    public static void main(String[] args) {
        SampleApp app=new SampleApp();
        app.main(args);
    }
}

Свяжите этот основной метод с основным методом в "SampleApp.scala "class.

package animals
class SampleApp {
  def main(args: Array[String]){
     var c = new Cow("Bessie", 100)
     println(c.speak)
     var h = new Horse("CJ", 50)
     println(h.speak)
     var s = new Sheep("Little Lamb", 25)
     println(s.speak)

     println(s.weigh)
     println(h.weigh)
     println(c.weigh)
  }
}

Проект с классами Java и Scala Изображение

Щелкните правой кнопкой мыши проект ScalaPracticeCreation.Нажмите кнопку «Экспорт ...». Выберите «Запускаемый файл JAR» в папке Java Экспорт класса Scala в jar-файл. Исполняемый файл

Нажмите «Далее»>

Выбрать оболочку - ScalaPracticeCreations

Выберите Экспорт места назначения в место на вашем компьютере

Выберите «Извлечь необходимые библиотеки в сгенерированный JAR» под опцией «Обработка библиотеки:»

Нажмите Готово

Запуститефайл через IDE Eclipse, и он работает.

Запустите его через командную строку, и он не работает. Изображение командной строки

Чтобы исправить это, удалите методы println из "SampleApp.scala".

package animals
class SampleApp {
  def main(args: Array[String]) {
    var c = new Cow("Bessie", 100)
    var h = new Horse("CJ", 50)
    var s = new Sheep("Little Lamb", 25)
    c.weigh().toString()
  }
}

add "System.out.println (app.main(арг));»заменить "app.main (args);"в классе Wrapper.java

package animals;
public class Wrapper {
    public static void main(String[] args) {
        SampleApp app=new SampleApp();
        System.out.println(app.main(args));
    }
}

Теперь переэкспортируйте программу после запуска. успех в командной строке Изображение

Теперь это работает.

Вот дополнительные классы заполнителя .scala.Обратите внимание, что класс Demo.scala не имеет значения.

Weight.scala:

package animals
abstract class Weight(size: Int) {
  def weigh = "My size is " + size
}

Animal.scala:

package animals
abstract class Animal(name: String, weight: Int) extends Weight(weight){
  def speak = name + " says " + sound
  def sound: String
  override def weigh() = "My name is " + name + " and I weigh: " + weight
}

Cow.scala:

package animals
class Cow (name: String, weight: Int) extends Animal(name,weight){
  override def sound() = "mooooo"
}

Horse.scala:

package animals
class Horse (name: String, weight: Int) extends Animal(name,weight){
  override def sound() = "neigh"
}

Sheep.scala:

package animals    
class Sheep (name: String, weight: Int) extends Animal(name,weight) {
  override def sound() = "baaaa"
}

Обратите внимание, что это может быть не лучшим решением, хотя это функциональное решение.Scala sbt может быть лучшим решением: Scala sbt или эта Scala sbt-Assembly .

0 голосов
/ 23 июля 2011
% cat a.scala 
package foo

object Whee {
  def main(args: Array[String]): Unit = {
    println("I'm in a jar")    
  }
}
% scalac29 -d whee.jar a.scala 
% scala29 -cp whee.jar foo.Whee
I'm in a jar
%
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...