使用 Maven 将 Java EE 应用程序部署到 payara41 docker 容器
Deploy Java EE application to payara41 docker container using maven
我正在尝试将一个简单的基于 Maven 的 java Web 应用程序部署到 docker 容器上的 payara 41 应用程序服务器 运行 中。为此,我使用具有以下配置的 Glassfish Maven 插件:
<plugin>
<groupId>org.glassfish.maven.plugin</groupId>
<artifactId>maven-glassfish-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<goals>
<goal>deploy</goal>
</goals>
<id>deploy</id>
</execution>
</executions>
<configuration>
<glassfishDirectory>/path/to/local/payara41/glassfish</glassfishDirectory>
<user>admin</user>
<adminPassword>MyPassword</adminPassword>
<debug>true</debug>
<echo>true</echo>
<domain>
<name>payaradomain</name>
<adminPort>4848</adminPort> <!-- mandatory for mvn glassfish:deploy -->
<httpPort>8080</httpPort>
<httpsPort>8181</httpsPort>
<host>DOCKER_CONTAINER_IP</host>
<jvmOptions>
<option>-Djava.security.auth.login.config=${project.build.testOutputDirectory}/login.conf</option>
</jvmOptions>
<properties>
<property>
<name>server.log-service.file</name>
<value>${domain.log.dir}/server.log</value>
</property>
</properties>
<resourceDescriptor>${project.build.sourceDirectory}/setup/glassfish-resources.xml</resourceDescriptor>
</domain>
<components>
<component>
<name>${project.artifactId}</name>
<artifact>${project.build.directory}/${project.build.finalName}.war</artifact>
</component>
</components>
</configuration>
</plugin>
如您所见,我在域配置中使用主机 属性,因为我正在尝试部署到 docker 容器,这是一个远程域(这可能是错误的,如果是这样你可以纠正我)。
问题是,当我尝试部署应用程序时,我得到以下输出:
Domain payaradomain isn't started. Starting it for you.
Domain payaradomain does not exist. Creating it for you.
[/path/to/local/payara41/glassfish/bin/asadmin, create-domain, --echo=true, --terse=true, --interactive=false, --user, admin, -- passwordfile, /tmp/mgfp5897945230218013760.tmp, --domaindir, /path/to/local/payara41/glassfish/domains, --profile, developer, -- adminport, 4848, --instanceport, 8080, --domainproperties, http.ssl.port=8181, payaradomain]
CLI031: Warning: Option "profile" is obsolete and will be ignored.
asadmin --host localhost --port 4848 --user admin --passwordfile /tmp/mgfp5897945230218013760.tmp --interactive=false --echo=true -- terse=true create-domain --adminport 4848 --profile developer --domaindir /path/to/local/payara41/glassfish/domains --instanceport 8080 -- savemasterpassword=false --usemasterpassword=false --domainproperties http.ssl.port=8181 --savelogin=false --nopassword=false --checkports=true payaradomain
CLI130: Could not create domain, payaradomain
Unable to create domain "payaradomain".
For more detail on what might be causing the problem try running maven with the --debug option
or setting the maven-glassfish-plugin "echo" property to "true".
如您所见,maven 正在尝试在本地部署应用程序。我认为 Maven Glassfish 插件的配置有问题。
我正在使用 Netbeans 8.0.2、Apache Maven 3.0.5 和 Java 8
编辑
我 运行 带有 --debug 选项的 maven,但得到了相同的输出。我认为这不是系统权限的问题。有趣的是,我认为 maven 正在尝试执行此命令:
asadmin --host localhost --port 4848 --user admin --passwordfile /tmp/mgfp2052757567130924436.tmp --interactive=false --echo=true -- terse=true create-domain --adminport 4848 --profile developer --domaindir /path/to/local/payara41/glassfish/domains --instanceport 8080 -- savemasterpassword=false --usemasterpassword=false --domainproperties http.ssl.port=8181 --savelogin=false --nopassword=false --checkports=true payaradomain
其中 localhost 设置为 --host 选项,我认为 maven 尚未从配置中选取此选项。也许我错过了什么。
问题是我的本地 payara 不是 运行,也许这就是它无法创建 payaradomain 的原因。但是在 docker 容器上,即 运行,这个域已经存在
您可能不应该将 docker 容器视为 "remote deploy",而是在主机上发布所有需要的端口(请参阅 运行 命令的 -p 选项),并且只是在本地部署。
我正在尝试将一个简单的基于 Maven 的 java Web 应用程序部署到 docker 容器上的 payara 41 应用程序服务器 运行 中。为此,我使用具有以下配置的 Glassfish Maven 插件:
<plugin>
<groupId>org.glassfish.maven.plugin</groupId>
<artifactId>maven-glassfish-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<goals>
<goal>deploy</goal>
</goals>
<id>deploy</id>
</execution>
</executions>
<configuration>
<glassfishDirectory>/path/to/local/payara41/glassfish</glassfishDirectory>
<user>admin</user>
<adminPassword>MyPassword</adminPassword>
<debug>true</debug>
<echo>true</echo>
<domain>
<name>payaradomain</name>
<adminPort>4848</adminPort> <!-- mandatory for mvn glassfish:deploy -->
<httpPort>8080</httpPort>
<httpsPort>8181</httpsPort>
<host>DOCKER_CONTAINER_IP</host>
<jvmOptions>
<option>-Djava.security.auth.login.config=${project.build.testOutputDirectory}/login.conf</option>
</jvmOptions>
<properties>
<property>
<name>server.log-service.file</name>
<value>${domain.log.dir}/server.log</value>
</property>
</properties>
<resourceDescriptor>${project.build.sourceDirectory}/setup/glassfish-resources.xml</resourceDescriptor>
</domain>
<components>
<component>
<name>${project.artifactId}</name>
<artifact>${project.build.directory}/${project.build.finalName}.war</artifact>
</component>
</components>
</configuration>
</plugin>
如您所见,我在域配置中使用主机 属性,因为我正在尝试部署到 docker 容器,这是一个远程域(这可能是错误的,如果是这样你可以纠正我)。
问题是,当我尝试部署应用程序时,我得到以下输出:
Domain payaradomain isn't started. Starting it for you.
Domain payaradomain does not exist. Creating it for you.
[/path/to/local/payara41/glassfish/bin/asadmin, create-domain, --echo=true, --terse=true, --interactive=false, --user, admin, -- passwordfile, /tmp/mgfp5897945230218013760.tmp, --domaindir, /path/to/local/payara41/glassfish/domains, --profile, developer, -- adminport, 4848, --instanceport, 8080, --domainproperties, http.ssl.port=8181, payaradomain]
CLI031: Warning: Option "profile" is obsolete and will be ignored.
asadmin --host localhost --port 4848 --user admin --passwordfile /tmp/mgfp5897945230218013760.tmp --interactive=false --echo=true -- terse=true create-domain --adminport 4848 --profile developer --domaindir /path/to/local/payara41/glassfish/domains --instanceport 8080 -- savemasterpassword=false --usemasterpassword=false --domainproperties http.ssl.port=8181 --savelogin=false --nopassword=false --checkports=true payaradomain
CLI130: Could not create domain, payaradomain
Unable to create domain "payaradomain".
For more detail on what might be causing the problem try running maven with the --debug option
or setting the maven-glassfish-plugin "echo" property to "true".
如您所见,maven 正在尝试在本地部署应用程序。我认为 Maven Glassfish 插件的配置有问题。 我正在使用 Netbeans 8.0.2、Apache Maven 3.0.5 和 Java 8
编辑 我 运行 带有 --debug 选项的 maven,但得到了相同的输出。我认为这不是系统权限的问题。有趣的是,我认为 maven 正在尝试执行此命令:
asadmin --host localhost --port 4848 --user admin --passwordfile /tmp/mgfp2052757567130924436.tmp --interactive=false --echo=true -- terse=true create-domain --adminport 4848 --profile developer --domaindir /path/to/local/payara41/glassfish/domains --instanceport 8080 -- savemasterpassword=false --usemasterpassword=false --domainproperties http.ssl.port=8181 --savelogin=false --nopassword=false --checkports=true payaradomain
其中 localhost 设置为 --host 选项,我认为 maven 尚未从配置中选取此选项。也许我错过了什么。
问题是我的本地 payara 不是 运行,也许这就是它无法创建 payaradomain 的原因。但是在 docker 容器上,即 运行,这个域已经存在
您可能不应该将 docker 容器视为 "remote deploy",而是在主机上发布所有需要的端口(请参阅 运行 命令的 -p 选项),并且只是在本地部署。