СУХОЙ способ определения зависимостей для пристани: запуск и развертывание - PullRequest
5 голосов
/ 06 октября 2010

Я завершаю сборку для веб-проекта, который поддерживает два способа запуска:

  • локально с использованием mvn jetty-run;
  • , развернутого на сервере приложений.

Для сервера приложений многие библиотеки помечены как provided, поскольку в противном случае возникают конфликты путей к классам.В то же время я объявил эти зависимости как зависимости компиляции для jetty-maven-plugin, так как в противном случае цели не выполняются должным образом.

Сборка работает так, но у меня есть большое количество дублированных библиотек.Есть ли более чистый способ сделать это?

Ответы [ 4 ]

3 голосов
/ 25 января 2013

Просто чтобы продолжить это JETTY-429 было объединено, поэтому вы можете с осторожностью добавить параметр конфигурации <useProvidedScope>true</useProvidedScope>. Это будет включать предоставленные зависимости для jetty plugin classpath .

Стоит прочитать JETTY-429 , чтобы узнать о потенциальных проблемах, которые может принести эта опция.

2 голосов
/ 06 октября 2010

Я не говорю, что это лучшее решение, но как насчет этого:

  1. В ваших зависимостях по умолчанию список предоставленных зависимостей указан как "предоставленный".Конфигурация проекта по умолчанию должна создавать файлы WAR, которые будут выполняться на серверах, отличных от Jetty.
  2. Определить профиль "jetty" и повторно объявить предоставленные зависимости в области компиляции.Затем просто запустите mvn -Pjetty jetty: run

Это может быть не самое чистое решение в мире, так как оно вызывает некоторое повторение, но оно должно выполнить работу за вас.

2 голосов
/ 06 октября 2010

Мне также хотелось бы, чтобы какой-нибудь флаг включал provided зависимости области действия при запуске Jetty.На самом деле, у Jetty уже есть useTestClasspath, выполняющий нечто подобное для test зависимостей в области (почему в этом случае не учитывается provided), чтобы избежать дублирования зависимостей в профиле.Это отслеживается JETTY-429 , у которого есть патч для такого флага.

2 голосов
/ 06 октября 2010

Ну, всегда есть решение для калитки.(Это не имеет ничего общего с wicket, но его можно найти в wicket maven архетипе .)

Использовать основной класс, который запускается программно с проекта в качестве контекста webapp,Это должно охватить все maven-зависимости, даже в предоставленной области, на всех основных IDE.Вот такой класс:

public class Start{

    private static final Logger LOG = Logger.getLogger(Start.class);

    public static void main(final String[] args) throws Exception{
        LOG.addAppender(new ConsoleAppender(new SimpleLayout(), "system.out"));
        final Server server = new Server();
        final SocketConnector connector = new SocketConnector();

        // Set some timeout options to make debugging easier.
        connector.setMaxIdleTime(1000 * 60 * 60);
        connector.setSoLingerTime(-1);
        connector.setPort(9090);
        server.setConnectors(new Connector[] { connector });

        final WebAppContext bb = new WebAppContext();
        bb.setServer(server);
        bb.setContextPath("/");
        bb.setWar("src/main/webapp");
        server.addHandler(bb);

        try{
            LOG.info(//
            ">>> STARTING EMBEDDED JETTY SERVER, PRESS ANY KEY TO STOP" //
            );
            server.start();
            System.in.read();
            LOG.info(">>> STOPPING EMBEDDED JETTY SERVER");
            server.stop();
            server.join();

        } catch(final Exception e){
            LOG.error("Something bad happened", e);
            System.exit(100);
        }
    }

    // CHECKSTYLE:ON
}

Хорошая часть: вы можете запустить его как стандартную конфигурацию запуска затмения, включая простую отладку.Недостаток: вам нужна пристань как дополнительная provided зависимость:

<!-- JETTY DEPENDENCIES FOR TESTING -->
<dependency>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty</artifactId>
    <version>${jetty.version}</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty-util</artifactId>
    <version>${jetty.version}</version>
    <scope>provided</scope>
</dependency>
...