7

我正在尝试将 glassfish-maven-plugin ( 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>

这是 Maven 正在执行的 start-domain 命令。

asadmin --host localhost --port 4848 --user admin --passwordfile /var/folders/sk/skcc8rAVGSynOBBaOwWN3U+++TI/-Tmp-/mgfp5377058868244877698.tmp --interactive=false --echo=true --terse= true 起始域 --debug=false --domaindir /Applications/GlassFish/v3/glassfish/domains --help=false --upgrade=false --verbose=false mvnrepo

--passwordfile 正在使用临时文件,所以我猜这就是问题所在。由于某种原因 passFile 参数不起作用。

有任何想法吗?我的假设错了吗?

4

2 回答 2

11

相当完整的配置示例中,确实有对<passFile>元素的引用,但各种目标的文档没有提到这个元素,<passwordFile>而是引用了(参见例如glassfish:start-domainglassfish: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,它允许使用其嵌入式 API 在单个 JVM 中运行 Glassfish。非常好。有关更多详细信息,请参阅使用 v3 嵌入式 glassfish 的 maven 插件。

更新:我做了一些进一步的测试,但实际上无法在我的机器上重现您的问题(叹气)。

首先,我通过执行以下命令(来自<glassfish_home>/bin)创建了一个新域:

$ ./asadmin create-domain  --savemasterpassword=true maven-glassfish-testcase

然后,我使用 maven 的 webapp 原型创建了一个新的 webapp:

$ mvn archetype:create -DgroupId=com.mycompany.app \
      -DartifactId=maven-glassfish-testcase \
      -DarchetypeArtifactId=maven-archetype-webapp

并更新了pom.xml新创建的 webapp 如下:

<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:开始域
[INFO] 正在扫描项目...
[INFO] 快照 org.glassfish.maven.plugin:maven-glassfish-plugin:2.2-SNAPSHOT:检查来自海洋的更新
[信息] --------------------------------------------- -------------------------
[信息] 构建 maven-glassfish-testcase Maven Webapp
[INFO] 任务段:[glassfish:start-domain]
[信息] --------------------------------------------- -------------------------
[信息] [glassfish:start-domain {执行:default-cli}]
[信息] 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] 启动域:maven-glassfish-testcase
[INFO] 域位置:/home/pascal/opt/glassfishv3/glassfish/domains/maven-glassfish-testcase
[信息] 日志文件:/home/pascal/opt/glassfishv3/glassfish/domains/maven-glassfish-testcase/logs/server.log
[INFO] 域的管理端口:4848
[INFO] 域的调试端口:9009
[信息] --------------------------------------------- -------------------------
[信息] 构建成功
[信息] --------------------------------------------- -------------------------
[INFO] 总时间:27 秒
[INFO] 完成时间:2009 年 12 月 21 日星期一 20:16:17 CET
[INFO] 最终内存:4M/53M
[信息] --------------------------------------------- -------------------------

如您所见,该--passwordfile选项使用 POM 中指定的文件正确传递。换句话说,事情正在按预期工作。也许尝试使用密码文件的硬编码路径来调试此设置,它应该可以工作!

于 2009-12-20T16:17:24.247 回答
1

我花了一段时间才意识到我不小心在 Maven-Glassfish-Plugin 配置中留下了“adminPassword”属性(所以我同时设置了 adminPassword 和 passwordFile)。该插件仍然使用临时密码文件而不是我自己的,导致上述错误。

以防万一其他人像我一样愚蠢;)

于 2010-07-25T17:33:26.580 回答