Я пытаюсь использовать плагин Glassfish-maven (https://maven-glassfish-plugin.dev.java.net/) с GlassFish v3 (у меня Mac и Eclipse), и я не могу развернуть свое веб-приложение. Я продолжаю сталкиваться с:
Мастер-пароль необходим для запуска домена. Нет консоли, нет подсказок. Вы должны либо создать домен с параметром --savemasterpassword=true, либо предоставить файл паролей с параметром --passwordfile.
Вот соответствующая часть моего файла POM.
<profiles>
<profile>
<id>development</id>
<activation>
<property>
<name>phase</name>
<value>development</value>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.glassfish.maven.plugin</groupId>
<artifactId>maven-glassfish-plugin</artifactId>
<version>2.2-SNAPSHOT</version>
<configuration>
<glassfishDirectory>${glassfish.directory}</glassfishDirectory>
<user>${glassfish.user}</user>
<passFile>${glassfish.directory}/domains/${project.artifactId}/config/domain-passwords</passFile>
<domain>
<name>${project.artifactId}</name>
</domain>
<components>
<component>
<name>${project.artifactId}</name>
<artifact>${project.build.directory}/artifacts/${project.artifactId}.war</artifact>
</component>
</components>
</configuration>
</plugin>
</plugins>
</build>
<pluginRepositories>
<pluginRepository>
<id>ocean</id>
<url>http://maven.ocean.net.au/snapshot</url>
<releases>
<enabled>false</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
Вот команда start-domain, которую выполняет Maven.
asadmin --host localhost --port 4848 --user admin --passwordfile /var/folders/sk/skcc8rAVGSynOBBaOwWN3U+++TI/-Tmp-/mgfp5377058868244877698.tmp --interactive=false --echo=true --terse= true start-domain --debug=false --domaindir /Applications/GlassFish/v3/glassfish/domains --help=false --upgrade=false --verbose=false mvnrepo
--passwordfile использует временный файл, поэтому я предполагаю, что проблема в нем. По какой-то причине параметр passFile не работает.
Любые идеи? Я ошибаюсь в своем предположении?
Ответ 1 · рейтинг 11 · Pascal Thivent
В Полный пример полной конфигурации действительно есть ссылка на элемент <passFile>, но в документации по различным целям этот элемент не упоминается и вместо этого упоминается <passwordFile> (см., например, glassfish:start-domain или glassfish:deploy). Итак, попробуйте соответствующим образом обновить конфигурацию вашего плагина в своем профиле:
<plugin>
<groupId>org.glassfish.maven.plugin</groupId>
<artifactId>maven-glassfish-plugin</artifactId>
<version>2.2-SNAPSHOT</version>
<configuration>
<glassfishDirectory>${glassfish.directory}</glassfishDirectory>
<user>${glassfish.user}</user>
<passwordFile>${glassfish.directory}/domains/${project.artifactId}/config/domain-passwords</passwordFile>
<domain>
<name>${project.artifactId}</name>
</domain>
<components>
<component>
<name>${project.artifactId}</name>
<artifact>${project.build.directory}/artifacts/${project.artifactId}.war</artifact>
</component>
</components>
</configuration>
</plugin>
В качестве примечания я рекомендую maven-embedded -glassfish-plugin, который позволяет запускать Glassfish на одной JVM с помощью встроенного API. Очень хорошо. Дополнительные сведения см. в разделе Использование подключаемого модуля maven для встроенной стеклянной рыбы v3 .
ОБНОВЛЕНИЕ: я провел дополнительное тестирование и не смог воспроизвести вашу проблему на своем компьютере (вздох).
Сначала я создал новый домен, выполнив следующую команду (из <glassfish_home>/bin):
$ ./asadmin create-domain --savemasterpassword=true maven-glassfish-testcase
Затем я создал новое веб-приложение, используя архетип веб-приложения maven:
$ mvn archetype:create -DgroupId=com.mycompany.app \
-DartifactId=maven-glassfish-testcase \
-DarchetypeArtifactId=maven-archetype-webapp
И обновил pom.xml только что созданного веб-приложения следующим образом:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>maven-glassfish-testcase</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>maven-glassfish-testcase Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<glassfish.home>/home/pascal/opt/glassfishv3/glassfish</glassfish.home>
<domain.username>admin</domain.username>
</properties>
<pluginRepositories>
<pluginRepository>
<id>ocean</id>
<url>http://maven.ocean.net.au/snapshot</url>
<releases>
<enabled>false</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</pluginRepository>
</pluginRepositories>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>maven-glassfish-testcase</finalName>
<plugins>
<plugin>
<groupId>org.glassfish.maven.plugin</groupId>
<artifactId>maven-glassfish-plugin</artifactId>
<version>2.2-SNAPSHOT</version>
<configuration>
<glassfishDirectory>${glassfish.home}</glassfishDirectory>
<user>${domain.username}</user>
<passwordFile>${glassfish.home}/domains/${project.artifactId}/master-password</passwordFile>
<debug>true</debug>
<echo>true</echo>
<domain>
<name>${project.artifactId}</name>
<adminPort>4848</adminPort> <!-- mandatory for mvn glassfish:deploy -->
</domain>
<components>
<component>
<name>${project.artifactId}</name>
<artifact>${project.build.directory}/${project.build.finalName}.war</artifact>
</component>
</components>
</configuration>
</plugin>
</plugins>
</build>
</project>
С этой настройкой запуск mvn glassfish:start-domain приводит к следующему выводу:
$ mvn glassfish:start-domain
[INFO] Scanning for projects...
[INFO] snapshot org.glassfish.maven.plugin:maven-glassfish-plugin:2.2-SNAPSHOT: checking for updates from ocean
[INFO] ------------------------------------------------------------------------
[INFO] Building maven-glassfish-testcase Maven Webapp
[INFO] task-segment: [glassfish:start-domain]
[INFO] ------------------------------------------------------------------------
[INFO] [glassfish:start-domain {execution: default-cli}]
[INFO] asadmin --host localhost --port 4848 --user admin --passwordfile /home/pascal/opt/glassfishv3/glassfish/domains/maven-glassfish-testcase/master-password --interactive=false --echo=true --terse=true start-domain --debug=true --domaindir /home/pascal/opt/glassfishv3/glassfish/domains --help=false --upgrade=false --verbose=false maven-glassfish-testcase
[INFO] Started domain: maven-glassfish-testcase
[INFO] Domain location: /home/pascal/opt/glassfishv3/glassfish/domains/maven-glassfish-testcase
[INFO] Log file: /home/pascal/opt/glassfishv3/glassfish/domains/maven-glassfish-testcase/logs/server.log
[INFO] Admin port for the domain: 4848
[INFO] Debug port for the domain: 9009
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 27 seconds
[INFO] Finished at: Mon Dec 21 20:16:17 CET 2009
[INFO] Final Memory: 4M/53M
[INFO] ------------------------------------------------------------------------
Как видите, параметр --passwordfile передается правильно с использованием файла, указанного в POM. Другими словами, все работает так, как ожидалось. Возможно, попробуйте жестко закодировать путь к файлу паролей, чтобы отладить этот параметр, он должен работать!
Ответ 2 · рейтинг 1 · Wolkenarchitekt
Мне потребовалось некоторое время, чтобы понять, что я случайно оставил свойство "adminPassword" в конфигурации Maven-Glassfish-Plugin (поэтому у меня были установлены как adminPassword, так и passwordFile). Плагин по-прежнему использовал временный файл паролей вместо моего собственного, что приводило к указанной выше ошибке.
На всякий случай, если кто-то еще такой же глупый, как я;)