2017-04-02 16 views
2

我已閱讀,您需要kotlin-maven-noarg實體類的編譯器插件,以便它生成默認參數少的cosntructor。沒有使用Kotlin的JPA實體的默認構造函數,即使使用noarg插件

但應用不與下面的錯誤啓動:

No default constructor for entity

你能告訴我什麼我做錯了嗎?

的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與科特林1.1.0,所以對於我的部署只需點擊調試/運行使用Tomcat運行配置選擇並運行測試我只需右鍵單擊測試類,並單擊運行/調試。

+0

有默認的構造函數,如果你使用的是無參數的插件,但問題是隻能通過反射來訪問,因爲它在編譯的時候產生的。 – Stepango

回答

2

在運行測試之前,您是否嘗試過運行您的Maven compile目標?我發現Intellij針對Kotlin run/test的默認配置不會激發Maven插件,因此不會應用no-arg插件。

嘗試運行您的compile目標,然後再次運行您的測試。

+0

是否可以通過gradle更改IntelliJ的默認行爲以運行單元測試?謝謝! –

0

我和intellij/gradle/kotlin有類似的問題。

在我的情況下,我總是通過intellij編輯器運行圖標調用main方法來啓動web應用程序。我不知道發生了什麼問題,但不知何故構建過程沒有正確完成。

相反,如果我通過調用./gradlew bootRun從控制檯啓動web應用程序,一切正常!

0

我有同樣的問題。我使用gradle build btw。

什麼工作對我來說是,而不是運行默認的運行配置,使工作的IntelliJ提供的我創建的類型gradle產出的一個新的運行配置

Gradle project選擇我的項目, 上Tasks選擇​​

然後跑到我的項目,它爲我工作

enter image description here

相關問題