Что я делаю не так?
1) Остерегайтесь, когда вы хотите использовать плагины / библиотеки без поддержки. Исходный код не обновлялся с 8 лет. Это может иметь важные проблемы.
2) Чтобы узнать, как использовать плагин maven, не смотрите в объявлении pom. Вы можете найти некоторую информацию, но вы найдете гораздо больше информации в реализации / спецификации mojo.
Но на самом деле нет, вам даже не следует полагаться на это, чтобы понять, как использовать плагин.
3) Действительно, плагин Maven может поддерживать настраиваемые свойства: непосредственно в pom. xml и даже экспортировать их для использования в командной строке. Но это не автомат c. Но в обоих случаях это должно быть предусмотрено разработчиком плагина , и это обычно документируется на плагине или на домашней странице репозитория исходного кода.
Фактически в вашем случае, если вы go включите в реализацию Mojo: AbstractH2Mojo , вы сможете увидеть, как задана конфигурация.
Все свойства имеют значения по умолчанию в mojo конструктор.
protected AbstractH2Mojo() {
super();
final Service tcpService = new Service("tcp", Service.getDefaultPort("tcp"), false, false);
this.setServices(Collections.singletonList(tcpService));
this.setPort(Service.getDefaultPort("tcp"));
this.setShutdownPassword("h2-maven-plugin");
this.setJava(new File(new File(new File(System.getProperty("java.home")), "bin"), "java"));
}
Сначала вызывается пустой конструктор mojo, затем вызывается весь установщик для созданного экземпляра.
Это означает, что вы можете переопределить любое из этих свойств, определенных в этом классе, во время выполнения, предоставив свойство например, ${artifactIdPrefixWithoutMavenPlugin}.field
.
Поскольку подключаемый модуль maven - h2-maven-plugin
, префикс для обозначения - h2
.
Если вы запустите это:
mvn -X com.edugility:h2-maven-plugin:1.0:spawn -Dh2.port=8084 -Dh2.useSSL=false
Вы можете увидеть в выводе:
[DEBUG] Configuring mojo 'com.edugility:h2-maven-plugin:1.0:spawn' with basic configurator -->
[DEBUG] (s) port = 8084
[DEBUG] (s) shutdownHost = localhost
[DEBUG] (s) shutdownPassword = h2-maven-plugin
[DEBUG] (s) useSSL = false
[DEBUG] -- end configuration --
[DEBUG] Process arguments: [/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java, -cp, /home/david/.m2/repository/com/h2database/h2/1.3.162/h2-1.3.162.jar, org.h2.tools.Server, -tcp, -tcpPassword, h2-maven-plugin, -tcpPort, 8084]
Относительно используемого банку h2, если вы все еще смотрите в том же классе вы увидите ту часть, которая извлекает файл jar из classpath:
public final File getH2() {
final ProtectionDomain pd = Server.class.getProtectionDomain();
assert pd != null;
final CodeSource cs = pd.getCodeSource();
assert cs != null;
final URL location = cs.getLocation();
assert location != null;
try {
return new File(location.toURI());
} catch (final URISyntaxException wontHappen) {
throw (InternalError)new InternalError().initCause(wontHappen);
}
}
Это означает, что у вас нет возможности изменить используемый JAR H2: из командной строки при запуске плагина или из объявление плагина в pom. xml, поскольку в Mojo не определено свойство для достижения этого.
если вы измените версию H2, вам нужно изменить версию, встроенную в плагин. Для начала вы можете попытаться раскошелиться на репозиторий плагина GIT, изменить зависимость h2, используемую в pom, в соответствии с вашими требованиями и проверить, возможна ли работа с этим плагином, несмотря на пробел в версии.
Обратите внимание, что вы можете добавить новое свойство Mojo, чтобы сделать его полностью настраиваемым, например:
mvn ... -Dh2Version=1.4.200
Но в этом случае вам нужно будет получить его. Например, выполнив запрос на загрузку зависимости из центрального репозитория m2, например.
И вам также следует убедиться, что используются только допустимые диапазоны версии h2.