Не удалось запустить сервер hsqldb через плагин maven exec - PullRequest
4 голосов
/ 14 октября 2011

Я пытаюсь запустить сервер hsqldb для разработки.У меня была зависимость hsqldb:

<dependency>
   <groupId>org.hsqldb</groupId>
   <artifactId>hsqldb</artifactId>
   <version>2.2.4</version>
</dependency>

В сборке exec-maven-build:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.2.1</version>
    <executions>
        <execution>
            <goals>
                <goal>java</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <mainClass>org.hsqldb.server.Server</mainClass>
        <arguments>
            <argument>--database.0 file:target/monitoring</argument>
        </arguments>
    </configuration>
</plugin>

И я запускаю mvn exec: java, запускается сервер, и у меня появляется эта ошибка:

[Server@6e9770a3]: [Thread[org.hsqldb.server.Server.main(),5,org.hsqldb.server.Server]]: Failed to set properties
org.hsqldb.HsqlException: no valid database paths: maformed database enumerator: server.database.0 mem:monitoring

Я ищу в коде, что означает эта ошибка, и я нашел в коде hsqldb ошибку на этой странице => http://hsqldb.svn.sourceforge.net/viewvc/hsqldb/base/tags/2.2.5/src/org/hsqldb/server/Server.java?revision=4369&view=markup

private IntKeyHashMap getDBNameArray() {

    final String  prefix       = ServerProperties.sc_key_dbname + ".";
    final int     prefixLen    = prefix.length();
    IntKeyHashMap idToAliasMap = new IntKeyHashMap();
    Enumeration   en           = serverProperties.propertyNames();

    for (; en.hasMoreElements(); ) {
        String key = (String) en.nextElement();

        if (!key.startsWith(prefix)) {
            continue;
        }

        int dbNumber;

        try {
            dbNumber = Integer.parseInt(key.substring(prefixLen));
        } catch (NumberFormatException e1) {
            **printWithThread("maformed database enumerator: " + key);**

            continue;
        }

        String alias = serverProperties.getProperty(key).toLowerCase();

        if (!aliasSet.add(alias)) {
            printWithThread("duplicate alias: " + alias);
        }

        Object existing = idToAliasMap.put(dbNumber, alias);

        if (existing != null) {
            printWithThread("duplicate database enumerator: " + key);
        }
    }

    return idToAliasMap;
}

Так что hsqldb используют в качестве ключавесь аргумент: "нет допустимых путей к базе данных: преобразователь базы данных с измененной формой: server.database.0 mem: мониторинг "

Так что это похоже на ошибку, или я что-то сделал не так?

ОК, я нашел решение, я изменил способ, которым я даю аргументы плагину exec maven.

от этого:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.2.1</version>
    <executions>
        <execution>
            <goals>
                <goal>java</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <mainClass>org.hsqldb.server.Server</mainClass>
        <arguments>
            <argument>--database.0 file:target/monitoring</argument>
        </arguments>
    </configuration>
</plugin>

до этого:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.2.1</version>
    <executions>
        <execution>
            <goals>
                <goal>java</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <mainClass>org.hsqldb.server.Server</mainClass>
        <arguments>
            <argument>--database.0</argument>
            <argument>file:target/monitoring</argument>
        </arguments>
    </configuration>
</plugin>

И это работает

Ответы [ 2 ]

9 голосов
/ 17 октября 2011

Я изменил способ передачи аргументов плагину exec maven

из этого:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.2.1</version>
    <executions>
        <execution>
            <goals>
                <goal>java</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <mainClass>org.hsqldb.server.Server</mainClass>
        <arguments>
            <argument>--database.0 file:target/monitoring</argument>
        </arguments>
    </configuration>
</plugin>

к этому:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.2.1</version>
    <executions>
        <execution>
            <goals>
                <goal>java</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <mainClass>org.hsqldb.server.Server</mainClass>
        <arguments>
            <argument>--database.0</argument>
            <argument>file:target/monitoring</argument>
        </arguments>
    </configuration>
</plugin>

И это работает

3 голосов
/ 08 августа 2013

Я обнаружил, что в случае, если вам нужно запустить HSQL в режиме сервера из maven и продолжить выполнение интеграционных тестов, вы должны использовать maven-antrun-plugin и ant Java-задачу, поскольку exec-maven-plugin не поддерживает раздвоенный режим. :

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.6</version>
        <dependencies>
        </dependencies>
        <executions>
          <execution>
            <phase>pre-integration-test</phase>
            <configuration>
              <target>
                <property name="test_classpath" refid="maven.test.classpath" />
                <java classname="org.hsqldb.server.Server"
                  fork="yes" spawn="yes">
                  <arg
                    line="--database.0 mem:test --dbname.0 test" />
                  <classpath>
                    <pathelement path="${test_classpath}" />
                  </classpath>
                </java>
              </target>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

предполагается, что ваша зависимость hsqldb относится к области тестирования.

...