Не удается правильно запустить серверную часть DropWizard

Я разрабатываю приложение для Android и iOS, которое должно иметь серверную часть RESTful. До сегодняшнего дня я использовал Джерси с RunJettyRun на eclipse, но решил начать использовать что-то новое и лучшее! и я перешел на DropWizard и IntelliJ IDEA

Это программное обеспечение, которое я установил, и то, о чем я уже позаботился: - Java 8 - Maven 3.1.1 - Переменные среды для Maven и для Java.

Что ж, на данный момент я следую руководству по началу работы с DropWizard на их веб-сайте. Я сделал именно так, как они сказали, и в конце я попытался запустить банку, полученную из команды mvn package в терминале IntelliJ. Результат был на выходе:

usage: java -jar dropwizard-1.0-SNAPSHOT.jar
       [-h] [-v] {server,check} ...

positional arguments:
  {server,check}         available commands

optional arguments:
  -h, --help             show this help message and exit
  -v, --version          show the application version and exit

Process finished with exit code 0

Код :

Класс ресурса:

@Path("/hello-world")
@Produces(MediaType.APPLICATION_JSON)
public class HelloResource {
    private final String template;
    private final String defaultName;
    private final AtomicLong counter;

    public HelloResource(String template, String defaultName) {
        this.template = template;
        this.defaultName = defaultName;
        this.counter = new AtomicLong();
    }

    @GET
    @Timed
    public Saying sayHello(@QueryParam("name") Optional<String> name) {
        final String value = String.format(template, name.or(defaultName));
        return new Saying(counter.incrementAndGet(), value);
    }
}

Класс конфигурации: import com.fasterxml.jackson.annotation.JsonProperty; импортировать io.dropwizard.Configuration; импортировать org.hibernate.validator.constraints.NotEmpty;

import javax.validation.Valid;

/**
 * Created by Ido on 2/25/2015.
 */
public class Conf extends Configuration {
    @NotEmpty
    private String template;

    @NotEmpty
    private String defaultName = "Stranger";

    @JsonProperty
    public String getTemplate() {
        return template;
    }

    @JsonProperty
    public void setTemplate(String template) {
        this.template = template;
    }

    @JsonProperty
    public String getDefaultName() {
        return defaultName;
    }

    @JsonProperty
    public void setDefaultName(String name) {
        this.defaultName = name;
    }
}

Класс представления: открытый класс Говоря {частный длинный идентификатор;

    @Length(max = 3)
    private String content;

    public Saying() {
        // Jackson deserialization
    }

    public Saying(long id, String content) {
        this.id = id;
        this.content = content;
    }

    @JsonProperty
    public long getId() {
        return id;
    }

    @JsonProperty
    public String getContent() {
        return content;
    }
}

Класс обслуживания:

import io.dropwizard.Application;
import io.dropwizard.java8.Java8Bundle;
import io.dropwizard.setup.Bootstrap;
import io.dropwizard.setup.Environment;

/**
 * Created by Ido on 2/25/2015.
 */
public class ExampleService extends Application<Conf> {

    public static void main(String [] args) throws Exception {
        new ExampleService().run(args);
    }

    @Override
    public String getName() {
        return "Hello World";
    }

    @Override
    public void initialize(Bootstrap<Conf> bootstrap) {
        bootstrap.addBundle(new Java8Bundle());
    }

    @Override
    public void run(Conf conf, Environment environment) throws Exception {
        final HelloResource resource = new HelloResource(
                conf.getTemplate(),
                conf.getDefaultName()
        );

        final TemplateHealthCheck healthCheck =
                new TemplateHealthCheck(conf.getTemplate());
        environment.healthChecks().register("template", healthCheck);
        environment.
                jersey().register(resource);
    }
}

POM-файл

<modelVersion>4.0.0</modelVersion>

    <groupId>ido.dropwizard.example</groupId>
    <artifactId>dropwizard</artifactId>
    <version>1.0-SNAPSHOT</version>


    <properties>
        <dropwizard.version>0.7.1</dropwizard.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>io.dropwizard</groupId>
            <artifactId>dropwizard-core</artifactId>
            <version>${dropwizard.version}</version>
        </dependency>
        <dependency>
            <groupId>io.dropwizard.modules</groupId>
            <artifactId>dropwizard-java8</artifactId>
            <version>0.7.0-1</version>
        </dependency>
        <dependency>
            <groupId>io.dropwizard.modules</groupId>
            <artifactId>dropwizard-java8-auth</artifactId>
            <version>0.7.0-1</version>
        </dependency>

        <dependency>
            <groupId>io.dropwizard.modules</groupId>
            <artifactId>dropwizard-java8-jdbi</artifactId>
            <version>0.7.0-1</version>
        </dependency>
    </dependencies>


    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>1.6</version>
                <configuration>
                    <createDependencyReducedPom>true</createDependencyReducedPom>
                    <filters>
                        <filter>
                            <artifact>*:*</artifact>
                            <excludes>
                                <exclude>META-INF/*.SF</exclude>
                                <exclude>META-INF/*.DSA</exclude>
                                <exclude>META-INF/*.RSA</exclude>
                            </excludes>
                        </filter>
                    </filters>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>ido.dropwizard.example.ExampleService</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>


            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

        </plugins>
    </build>

Я добавил весь код, потому что мне действительно нужен ответ, потому что я столкнулся с этой проблемой в некоторых других учебниках на YouTube и Google и не смог заставить его работать... Кстати, когда я пытался проверить это, я набрал в браузере - http://localhost:8080/hello-world/something, а также http://localhost:8080/hello-world => Не работает :)

Ну, я буду очень благодарен за любую помощь, спасибо :)


person Ido Magor    schedule 27.02.2015    source источник
comment
Какую команду вы выполнили? Это показывает, что приложение не работает из того, что вы показываете. Когда вы видите меню справки из командной строки, это означает, что ваша команда неверна.   -  person Paul Samsotha    schedule 27.02.2015
comment
Сделайте это, поместите файл конфигурации yaml в тот же каталог, что и jar, затем cd в каталог (я не использую Itellij, поэтому понятия не имею, как это сделать с их консоли). Если в вашей системе локально установлен maven, я бы просто пошел из командной строки и использовал java -jar dropwizard-1.0-SNAPSHOT.jar server config.yml. Если вы следовали инструкциям с самого начала, это должно сработать.   -  person Paul Samsotha    schedule 27.02.2015
comment
А еще лучше не класть конфиг в папку jar. Он будет удален clean. Вместо этого поместите его в корень проекта. Потом cd в корень проекта (если еще не собрали, то mvn clean package), потом java -jar target/dropwizard-1.0-SNAPSHOT.jar server config.yml   -  person Paul Samsotha    schedule 27.02.2015
comment
Если у вас нет конфигурационного файла (который вы не показали), то вам следует еще раз просмотреть руководство, где показано, как это должно выглядеть, и будут примеры. Этот файл конфигурации необходим. Вот как ваш класс Conf получает значения   -  person Paul Samsotha    schedule 27.02.2015
comment
peeskillet, во-первых, большое спасибо, потому что, когда я пытался запустить банку, просто щелкнув по ней и запустив, я не работал, потому что мне нужно было указать значения {server} {config.yml}... Короче говоря, ЭТО РАБОТАЛО! :)   -  person Ido Magor    schedule 27.02.2015
comment
Но не могли бы вы дать развернутый ответ на вопрос о предмете в дропвизарде, зачем он нужен? Я понял классы: ресурс, конфигурация и приложение, но я не мог понять файл maven POM, каждую команду, зачем она нужна   -  person Ido Magor    schedule 27.02.2015
comment
И что делает команда mvn package? и как это делается с файлом pom   -  person Ido Magor    schedule 27.02.2015
comment
Давайте продолжим обсуждение в чате.   -  person Ido Magor    schedule 27.02.2015
comment
mvn package просто строит вашу банку. Это не имеет ничего общего с командой dropwizard/java/jar. Сначала вы создаете банку, а затем запускаете ее с помощью команды java jar. Что касается pom, вам, вероятно, нужно немного изучить Maven. Короче говоря, pom означает объектную модель проекта, поэтому это модель вашего проекта. У вас есть зависимости и плагины. Плагины помогают в сборке. Когда вы запускаете mvn package, он создает, а с помощью shade plugin` он собирает все (все зависимости и ваш проект) в одну банку.   -  person Paul Samsotha    schedule 27.02.2015
comment
Ну спасибо большое. Обсуждение не может быть закрыто   -  person Ido Magor    schedule 27.02.2015


Ответы (1)


Dropwizard принимает первый аргумент командной строки и отправляет его соответствующей команде. В этом случае доступны команды server и check, которые запускают ваше приложение как HTTP-сервер. Для команды сервера требуется файл конфигурации, вы можете сделать это следующим образом:

java -jar target/dropwizard-1.0-SNAPSHOT.jar server config.yml

если он находится в подпапке

java -jar target/dropwizard-1.0-SNAPSHOT.jar server conf/config.yml

если у вас нет config.yml, создайте его, как этот шаблон:

config.yml

person phdias    schedule 24.01.2018