Dropwizard 示例包编译错误
Dropwizard example package compile-error
我对 Java 及其工具完全陌生,我想使用 Dropwizard 框架。
我在其 repository 中找到了一个示例,但是我无法 运行 它。
如 README.md
中所述,我需要 运行 mvn package
。但是,据我了解,Maven 尝试 运行 集成测试但抛出异常。堆栈跟踪是这样的:
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 5.975 sec << FAILURE! - in com.example.helloworld.IntegrationTest
com.example.helloworld.IntegrationTest Time elapsed: 5.974 sec <<< ERROR!
liquibase.exception.LockException: liquibase.exception.DatabaseException: Unknown data type: "İNT"; SQL statement:
CREATE TABLE PUBLIC.DATABASECHANGELOGLOCK (ID İNT NOT NULL, LOCKED BOOLEAN NOT NULL, LOCKGRANTED TIMESTAMP, LOCKEDBY VARCHAR(255), CONSTRAINT PK_DATABASECHANGELOGLOCK PRIMARY KEY (ID)) [50004-192] [Failed SQL: CREATE TABLE PUBLIC.DATABASECHANGELOGLOCK (ID İNT NOT NULL, LOCKED BOOLEAN NOT NULL, LOCKGRANTED TIMESTAMP, LOCKEDBY VARCHAR(255), CONSTRAINT PK_DATABASECHANGELOGLOCK PRIMARY KEY (ID))]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
at org.h2.message.DbException.get(DbException.java:179)
at org.h2.message.DbException.get(DbException.java:155)
at org.h2.command.Parser.parseColumnWithType(Parser.java:4079)
at org.h2.command.Parser.parseColumnForTable(Parser.java:3937)
at org.h2.command.Parser.parseCreateTable(Parser.java:5972)
at org.h2.command.Parser.parseCreate(Parser.java:4237)
at org.h2.command.Parser.parsePrepared(Parser.java:362)
at org.h2.command.Parser.parse(Parser.java:317)
at org.h2.command.Parser.parse(Parser.java:289)
at org.h2.command.Parser.prepareCommand(Parser.java:254)
at org.h2.engine.Session.prepareLocal(Session.java:560)
at org.h2.engine.Session.prepareCommand(Session.java:501)
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1202)
at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:170)
at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:158)
at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:299)
at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:55)
at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:107)
at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:97)
at liquibase.lockservice.StandardLockService.init(StandardLockService.java:94)
at liquibase.lockservice.StandardLockService.acquireLock(StandardLockService.java:206)
at liquibase.lockservice.StandardLockService.waitForLock(StandardLockService.java:170)
at liquibase.Liquibase.update(Liquibase.java:196)
at liquibase.Liquibase.update(Liquibase.java:192)
at liquibase.Liquibase.update(Liquibase.java:188)
at liquibase.Liquibase.update(Liquibase.java:181)
at io.dropwizard.migrations.DbMigrateCommand.run(DbMigrateCommand.java:68)
at io.dropwizard.migrations.DbCommand.run(DbCommand.java:52)
at io.dropwizard.migrations.AbstractLiquibaseCommand.run(AbstractLiquibaseCommand.java:64)
at io.dropwizard.cli.ConfiguredCommand.run(ConfiguredCommand.java:85)
at io.dropwizard.cli.Cli.run(Cli.java:75)
at io.dropwizard.Application.run(Application.java:79)
at com.example.helloworld.IntegrationTest.migrateDb(IntegrationTest.java:38)
我认为它在区域设置方面存在一些问题,因为我的操作系统是 OS X 10.11 Turkish,其中我们将字符串大写 'i' 到 'İ',而不是 'I'.
我正在使用 IntelliJ IDEA,你能告诉我如何为接受测试的人更改当前语言环境吗(我不知道它是 JVM 或 Maven 或其他...)?
根据要求,我的 migrations.xml
文件:
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">
<changeSet id="1" author="codahale">
<createTable tableName="people">
<column name="id" type="bigint" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="fullName" type="varchar(255)">
<constraints nullable="false"/>
</column>
<column name="jobTitle" type="varchar(255)"/>
</createTable>
</changeSet>
</databaseChangeLog>
这应该是由您的 Java 虚拟机 (JVM) 的区域设置引起的。
只需打开终端或控制台(Windows)并运行以下命令,即可将语言环境更改为英语。
set JAVA_ARGS=-Duser.language=en -Duser.region=US %JAVA_ARGS%
要实现自动化,您可能需要在终端启动脚本中导出环境变量,例如 .bash_profile
.
我对 Java 及其工具完全陌生,我想使用 Dropwizard 框架。 我在其 repository 中找到了一个示例,但是我无法 运行 它。
如 README.md
中所述,我需要 运行 mvn package
。但是,据我了解,Maven 尝试 运行 集成测试但抛出异常。堆栈跟踪是这样的:
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 5.975 sec << FAILURE! - in com.example.helloworld.IntegrationTest
com.example.helloworld.IntegrationTest Time elapsed: 5.974 sec <<< ERROR!
liquibase.exception.LockException: liquibase.exception.DatabaseException: Unknown data type: "İNT"; SQL statement:
CREATE TABLE PUBLIC.DATABASECHANGELOGLOCK (ID İNT NOT NULL, LOCKED BOOLEAN NOT NULL, LOCKGRANTED TIMESTAMP, LOCKEDBY VARCHAR(255), CONSTRAINT PK_DATABASECHANGELOGLOCK PRIMARY KEY (ID)) [50004-192] [Failed SQL: CREATE TABLE PUBLIC.DATABASECHANGELOGLOCK (ID İNT NOT NULL, LOCKED BOOLEAN NOT NULL, LOCKGRANTED TIMESTAMP, LOCKEDBY VARCHAR(255), CONSTRAINT PK_DATABASECHANGELOGLOCK PRIMARY KEY (ID))]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
at org.h2.message.DbException.get(DbException.java:179)
at org.h2.message.DbException.get(DbException.java:155)
at org.h2.command.Parser.parseColumnWithType(Parser.java:4079)
at org.h2.command.Parser.parseColumnForTable(Parser.java:3937)
at org.h2.command.Parser.parseCreateTable(Parser.java:5972)
at org.h2.command.Parser.parseCreate(Parser.java:4237)
at org.h2.command.Parser.parsePrepared(Parser.java:362)
at org.h2.command.Parser.parse(Parser.java:317)
at org.h2.command.Parser.parse(Parser.java:289)
at org.h2.command.Parser.prepareCommand(Parser.java:254)
at org.h2.engine.Session.prepareLocal(Session.java:560)
at org.h2.engine.Session.prepareCommand(Session.java:501)
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1202)
at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:170)
at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:158)
at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:299)
at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:55)
at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:107)
at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:97)
at liquibase.lockservice.StandardLockService.init(StandardLockService.java:94)
at liquibase.lockservice.StandardLockService.acquireLock(StandardLockService.java:206)
at liquibase.lockservice.StandardLockService.waitForLock(StandardLockService.java:170)
at liquibase.Liquibase.update(Liquibase.java:196)
at liquibase.Liquibase.update(Liquibase.java:192)
at liquibase.Liquibase.update(Liquibase.java:188)
at liquibase.Liquibase.update(Liquibase.java:181)
at io.dropwizard.migrations.DbMigrateCommand.run(DbMigrateCommand.java:68)
at io.dropwizard.migrations.DbCommand.run(DbCommand.java:52)
at io.dropwizard.migrations.AbstractLiquibaseCommand.run(AbstractLiquibaseCommand.java:64)
at io.dropwizard.cli.ConfiguredCommand.run(ConfiguredCommand.java:85)
at io.dropwizard.cli.Cli.run(Cli.java:75)
at io.dropwizard.Application.run(Application.java:79)
at com.example.helloworld.IntegrationTest.migrateDb(IntegrationTest.java:38)
我认为它在区域设置方面存在一些问题,因为我的操作系统是 OS X 10.11 Turkish,其中我们将字符串大写 'i' 到 'İ',而不是 'I'.
我正在使用 IntelliJ IDEA,你能告诉我如何为接受测试的人更改当前语言环境吗(我不知道它是 JVM 或 Maven 或其他...)?
根据要求,我的 migrations.xml
文件:
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">
<changeSet id="1" author="codahale">
<createTable tableName="people">
<column name="id" type="bigint" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="fullName" type="varchar(255)">
<constraints nullable="false"/>
</column>
<column name="jobTitle" type="varchar(255)"/>
</createTable>
</changeSet>
</databaseChangeLog>
这应该是由您的 Java 虚拟机 (JVM) 的区域设置引起的。
只需打开终端或控制台(Windows)并运行以下命令,即可将语言环境更改为英语。
set JAVA_ARGS=-Duser.language=en -Duser.region=US %JAVA_ARGS%
要实现自动化,您可能需要在终端启动脚本中导出环境变量,例如 .bash_profile
.