Создание файла EAR с помощью Gradle: как настроить веб-модули, если они являются зависимостями SNAPSHOT? - PullRequest
1 голос
/ 14 июля 2020

Я создаю файл EAR из внешних зависимостей с помощью Gradle следующим образом:

...
dependencies {
...
    deploy group: 'xx.xxx.xxx.xxx', name: 'war-name', version: '0.3.0', ext: 'war'
...
}

ear {
    deploymentDescriptor {
        webModule("war-name-0.3.0.war", "/war-name")
    }
}
...

Конфигурация уха достигает цели, чтобы не указывать номер версии в пути HTTP-конечных точек. Это решение предлагается в Невозможно настроить web-uri с плагином уха gradle для включения войны из репозитория maven .

Пока все работает нормально. Однако, если я сделаю то же самое для файла WAR с версией SNAPSHOT, конфигурация webModule больше не будет работать, поскольку имя файла war содержит отметку времени SNAPSHOT, а не вызывается точно так же, как версия:

...
dependencies {
...
    deploy group: 'xx.xxx.xxx.xxx', name: 'war-name', version: '0.3.0-SNAPSHOT', ext: 'war'
...
}

ear {
    deploymentDescriptor {
        // This fails, because the war file does not have this exact name, but instead contains 
        // the timestamp of the SNAPSHOT's buildtime.
        webModule("war-name-0.3.0-SNAPSHOT.war", "/war-name")
    }
}
...

Если я сделаю это выше, результирующий application.xml будет содержать следующие записи:

  <module>
    <web>
      <web-uri>war-name-0.3.0-20200714.134805-4.war</web-uri>
      <context-root>war-name-0.3.0-20200714.134805-4</context-root>
    </web>
  </module>
  <module>
    <web>
      <web-uri>war-name-0.3.0-SNAPSHOT.war</web-uri>
      <context-root>/war-name</context-root>
    </web>
  </module>

Я пытаюсь добиться, чтобы он сгенерировался вот так (в основном смесь из двух описаний модулей выше):

  <module>
    <web>
      <web-uri>war-name-0.3.0-20200714.134805-4.war</web-uri>
      <context-root>/war-name</context-root>
    </web>
  </module>

Думаю, мне нужно узнать используемую временную метку, а затем сделать это следующим образом:


ear {
    deploymentDescriptor {
        webModule("war-name-" + TIMESTAMP_OF_SNAPSHOT + ".war", "/war-name")
    }
}
...

Однако я немного потерялся о том, как я могу найти метку времени точной SNAPSHOT-версии, которая упакована в EAR. Любые идеи? Спасибо за помощь!

1 Ответ

1 голос
/ 15 июля 2020

Я уже сам нашел решение. Что вы можете сделать, так это найти использованный файл войны, выполнив поиск конфигурации:

ear {
    // Since we use SNAPSHOT-Versions sometimes (e.g. for integration testing),
    // We cannot just use the version of the war files when specifying the webModules.
    // Instead, we have to find out the exact filename of the used war-file (which will have an
    // arbitrary timestamp in the case of SNAPSHOT Versions).
    final def actualWarFileUsed = configurations.getByName("deploy")
            .filter{ final dep -> dep.name.contains("war-name")}
            .getSingleFile()
            .name

    deploymentDescriptor {
        webModule(actualWarFileUsed, "/war-name")
    }
}

Возможно, это поможет кому-то с той же проблемой.

...