没有使用Kotlin的JPA实体的默认构造函数,即使使用noarg插件

时间:2017-04-02 15:58:10

标签: spring intellij-idea kotlin

我已经读过你需要实体类的 kotlin-maven-noarg 编译器插件,以便它生成default-parameter less cosntructor。

但是应用程序不会以下列错误开头:

  

没有实体的默认构造函数

你能告诉我我做错了什么吗?

的pom.xml:

    <?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    {...}
    <build>
        <sourceDirectory>src/main/java</sourceDirectory>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>

        <testSourceDirectory>src/test/java</testSourceDirectory>
        <testResources>
            <testResource>
                <directory>src/test/resources</directory>
            </testResource>
        </testResources>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.jetbrains.kotlin</groupId>
                <artifactId>kotlin-maven-plugin</artifactId>
                <version>${kotlin.version}</version>
                <executions>
                    <execution>
                        <id>compile</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>test-compile</id>
                        <phase>test-compile</phase>
                        <goals>
                            <goal>test-compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <executions>
                    <execution>
                        <id>compile</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>testCompile</id>
                        <phase>test-compile</phase>
                        <goals>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>kotlin-maven-plugin</artifactId>
                <groupId>org.jetbrains.kotlin</groupId>
                <version>${kotlin.version}</version>

                <configuration>
                    <compilerPlugins>
                        <plugin>jpa</plugin>
                    </compilerPlugins>

                    <pluginOptions>
                        <option>jpa:annotation=javax.persistence.Entity</option>
                    </pluginOptions>
                </configuration>

                <dependencies>
                    <dependency>
                        <groupId>org.jetbrains.kotlin</groupId>
                        <artifactId>kotlin-maven-noarg</artifactId>
                        <version>${kotlin.version}</version>
                    </dependency>
                </dependencies>
            </plugin>

        </plugins>
    </build>

    <properties>
        {...}
        <junit.version>4.12</junit.version>
        <kotlin.version>1.1.0</kotlin.version>
    </properties>

        {...}

        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-stdlib</artifactId>
            <version>${kotlin.version}</version>
        </dependency>
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-test</artifactId>
            <version>${kotlin.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-reflect</artifactId>
            <version>${kotlin.version}</version>
        </dependency>

    </dependencies>

</project>

测试类:

@RunWith(SpringJUnit4ClassRunner::class)
@ContextConfiguration(classes = arrayOf(VedicaConfig::class))
class InitStructures {
    private var vedicaDBInit: VedicaDBInit? = null

    @Before
    fun init() {
        vedicaDBInit = VedicaDBInit()
    }

    @Test
    fun initClientFolders() {
    }
}

我正在使用Intellij IDEA和Kotlin 1.1.0,所以对于部署我只需单击调试/运行并选择Tomcat运行配置并运行测试我只需右键单击测试类,然后单击运行/调试。

6 个答案:

答案 0 :(得分:2)

在运行测试之前,您是否尝试过运行Maven compile目标?我发现Intellij的Kotlin run / test默认配置不会触发Maven插件,因此不应用no-arg插件。

尝试运行compile目标,然后再次运行测试。

答案 1 :(得分:1)

我遇到了同样的问题。我正在使用gradle build btw。

对我有用的是,我没有运行intellij提供的默认运行配置,而是创建了一个类型为gradle的新运行配置

Gradle project选择我的项目和 在Tasks已选中bootRun

然后运行我的项目,它对我有用

enter image description here

答案 2 :(得分:1)

这是一个Intellij错误,已在以下版本中修复:

  • IDEA 171.2455 + Kotlin插件1.1.0-dev-6111。
  • IDEA 171.2272.14(EAP)+ Kotlin插件1.1.0-beta-17。

详细信息:https://youtrack.jetbrains.com/issue/KT-15686

答案 3 :(得分:0)

我和intellij / gradle / kotlin有类似的问题。

在我的情况下,我总是通过intellij编辑器Run-Icon调用main方法来启动web应用程序。我不知道出了什么问题,但是不知怎的,构建过程没有正确完成。

相比之下,如果我通过调用./gradlew bootRun从控制台启动web应用程序,一切正常!

答案 4 :(得分:0)

最后经过几次尝试找到解决方法:

  • 打开“运行/调试配置”窗口(运行>编辑配置)
  • 选择您现有的Spring boot运行配置
  • 在“程序参数”字段中添加以下预设:

    -Xplugin=$KOTLIN_HOME/lib/noarg-compiler-plugin.jar -P plugin:org.jetbrains.kotlin.noarg:preset=jpa

  • 单击“确定”以保存配置
  • 再次停止并运行项目

Run configuration screenshot

有用的链接:No-arg compiler plugin info

答案 5 :(得分:0)

在遇到@LynAs的评论之前,我遇到了同样的错误;然后我记得IntelliJ中有一个设置可以确定如何构建和运行项目。它位于Settings -> Build, Execution, Deployment -> Gradle -> Build and run using下。选择Gradle (Default),因为如果选择IntelliJ IDEA,则您的构建可能无法正常运行。该行上方显示一条消息:

在纯Java / Kotlin项目中,借助优化,借助IDE进行构建和运行可能会更快。 请注意,IDE不支持所有Gradle插件,并且可能无法使用其中的某些插件正确构建项目。

因此,最好使用Gradle构建工具而不是IntelliJ的构建工具。

enter image description here