Querydsl-在pom.xml中注册自定义类型

时间:2018-12-03 11:59:18

标签: java maven querydsl

我正在尝试在querydsl元数据导出器中注册我的自定义类型。

我有这样的枚举:

public enum RoleName {
    ADMIN, USER;
}

然后,我为querydsl创建了自定义类型:

public class RoleNameType extends EnumByNameType<RoleName> {
    public RoleNameType(Class<RoleName> type) {
        super(type);
    }
}

我在pom.xml中的querydsl插件设置:

        <plugin>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-maven-plugin</artifactId>
            <version>4.2.1</version>
            <executions>
                <execution>
                    <goals>
                        <goal>export</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <jdbcDriver>oracle.jdbc.driver.OracleDriver</jdbcDriver>
                <jdbcUrl>jdbc:oracle:thin:@localhost:1521:xe</jdbcUrl>
                <jdbcUser>user</jdbcUser>
                <jdbcPassword>pass</jdbcPassword>
                <packageName>com.example</packageName>
                <targetFolder>target/generated-sources/java</targetFolder>
                <namePrefix>BLANK</namePrefix>
                <schemaPattern>TASK_MANAGER_USER</schemaPattern>
                <customTypes>
                    <customType>com.example.RoleNameType</customType>
                </customTypes>
                <typeMappings>
                    <typeMapping>
                        <table>TM_ROLE</table>
                        <column>ROLE_NAME</column>
                        <type>com.example.RoleName</type>
                    </typeMapping>
                </typeMappings>
                <numericMappings>
                    <numericMapping>
                        <total>1</total>
                        <decimal>0</decimal>
                        <javaType>java.lang.Boolean</javaType>
                    </numericMapping>
                </numericMappings>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>com.oracle</groupId>
                    <artifactId>ojdbc14</artifactId>
                    <version>10.2.0.5</version>
                </dependency>
            </dependencies>
        </plugin>

在构建异常期间返回: “原因:java.lang.ClassNotFoundException:com.example.RoleNameType”

我已经检查过软件包或类名中没有错字。 有什么想法如何与我的自定义枚举一起使用querydsl元数据导出器吗?

1 个答案:

答案 0 :(得分:2)

这并不是真正解决您的问题的方法,但也许可以帮助其他人更快地得出结论:

我想做的事情与您描述的一样,但都以相同的方式失败了。经过一段时间的浏览和浏览,我遇到了querydsl Github项目的问题#1865。 @timowest的回复指出,项目的源代码不属于插件的类路径的一部分。因此,导出器无法找到导致ClassNotFoundException的类型映射中指定的类。

他还指出,项目的依赖项在类路径中可用。我想,我尝试一下,然后提取枚举,将它们放在项目中的单独模块中。新模块作为对我的原始模块的依赖关系添加。不幸的是,结果是一样的:尽管抛出了ClassNotFoundException,但是enum模块出现在类路径中,用于检查Maven的调试输出。

@timowest在2016年对此问题做出了回应,并已解决该问题。我没有发现任何迹象表明它实际上已经解决。因此,我认为,没有简单的解决方案。无论如何,该项目似乎从一年以来就一直处于闲置状态。