ข้อยกเว้นระหว่างการดีบักใน NetBeans

ฉันมีโครงการ gradle ที่มีการพึ่งพาดังต่อไปนี้:

    compile "commons-codec:commons-codec:+"
    compile "commons-io:commons-io:+"
    compile "org.apache.poi:poi:+"
    compile "commons-logging:commons-logging:+"
    compile "net.sourceforge.cssparser:cssparser:+"
    compile "net.sourceforge.htmlunit:htmlunit:+"
    compile "net.sourceforge.htmlunit:htmlunit-core-js:+"
    compile "net.sourceforge.htmlunit:neko-htmlunit:+"
    compile "org.apache.commons:commons-lang3:+"
    compile "org.apache.httpcomponents:httpclient:+"
    compile "org.apache.httpcomponents:httpmime:+"
    compile "org.eclipse.jetty.websocket:websocket-client:+"
    compile "xalan:xalan:+"
    compile "org.apache.poi:poi:+"
    compile "org.apache.poi:poi-ooxml:+"
    compile "org.apache.cassandra:cassandra-all:+"
    compile "org.apache.cassandra:cassandra-thrift:+"
   compile "com.whalin:Memcached-Java-Client:+"
   compile "org.hibernate:hibernate-gradle-plugin:+"
   compile "org.hibernate:hibernate-core:+"
   compile "org.hibernate:hibernate-tools:+"
   compile "org.hibernate:hibernate-entitymanager:+"
   compile "org.hibernate:hibernate:+"
   compile "org.hibernate:hibernate-annotations:+"
   compile "mysql:mysql-connector-java:+"
   compile "org.hibernate:ejb3-persistence:+"
   compile "javax:javaee-api:+"
   compile "javax.persistence:persistence-api:+"
   compile "javassist:javassist:+"

ฉันไม่สามารถรันในโหมดแก้ไขข้อบกพร่องโดยใช้ NetBeans IDE ได้ เมื่อฉันลอง ฉันได้รับข้อยกเว้นดังต่อไปนี้:

18:54:28.174 [main] DEBUG o.h.cfg.annotations.PropertyBinder - Building property year_end
Exception in thread "main" java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
    at org.hibernate.cfg.annotations.EntityBinder.processComplementaryTableDefinitions(EntityBinder.java:1106)

ทำไม

คำถามของฉันไม่ซ้ำใครเพราะไม่เกี่ยวกับการรวบรวม โปรแกรมของฉันคอมไพล์ได้ดีด้วยโค้ด (gradle) ต่อไปนี้:

task compileJar(type: Jar) {
    manifest {
        attributes 'Implementation-Title': 'Applic version 0.9',
            'Implementation-Version': version,
            'Main-Class': 'com.company.runfile'
    }
    baseName = project.name + '-all'
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
    exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA' 
}

สิ่งนี้จะสร้างไฟล์ jar ที่ทำงานอย่างถูกต้อง แต่ฉันไม่สามารถดีบักแอปพลิเคชันเดียวกันใน NetBeans (เช่นใน Intellij IDEA) ได้


person Ekaterina Ivanova iceja.net    schedule 15.03.2017    source แหล่งที่มา
comment
อาจซ้ำกันของ รับ NoSuchMethodError: javax.persistence.Table.indexes( ) ขณะดำเนินการค้นหา JPA   -  person Joachim Rohde    schedule 15.03.2017


คำตอบ (1)


มีคำตอบมากมายใน stackoverflow ที่จะแก้ไขปัญหานี้

JB Nizet ได้ตรวจสอบปัญหานี้แล้วและแจ้งสาเหตุที่แท้จริงและขั้นตอนการแก้ปัญหาดังนี้:

Hibernate 4.3 เป็นเวอร์ชันแรกที่ใช้ข้อกำหนด JPA 2.1 (ส่วนหนึ่งของ Java EE 7) และคาดว่าจะมีไลบรารี JPA 2.1 ใน classpath ไม่ใช่ไลบรารี JPA 2.0 นั่นเป็นเหตุผลที่คุณได้รับข้อยกเว้นนี้: Table.indexes() เป็นคุณลักษณะใหม่ของ Table ซึ่งเปิดตัวใน JPA 2.1

หากต้องการข้อมูลเพิ่มเติม คุณสามารถตรวจสอบคำตอบที่เกี่ยวข้องได้:

  1. NoSuchMethodError ใน javax.persistence.Table.indexes()[Ljavax/persistence/ ดัชนี
  2. java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[ Ljavax/ความคงอยู่/ดัชนี;
person SkyWalker    schedule 18.03.2017
comment
เหตุใดจึงรวบรวมได้ดีเช่นนี้? ฉันได้รับข้อยกเว้นระหว่างพยายามแก้ไขจุดบกพร่องเท่านั้น และแอปพลิเคชันทำงานได้ดีโดยไม่ต้องดีบักภายนอก IDE อาจเป็นปัญหาของการไล่ระดับ - person Ekaterina Ivanova iceja.net; 20.03.2017
comment
ข้อยกเว้นเวลาดีบัก @Catherine เกิดขึ้นจริงด้วยเหตุผลอื่น อาจเป็นไปได้ว่ามีหลายเธรดกำลังรอการตอบกลับ เมื่อได้รับแพ็กเก็ตตอบกลับ notifyAll() จะดำเนินการในตัวจัดการการรับซึ่งจะช่วยให้เธรดหนึ่งตรวจสอบคิวแพ็กเก็ตตอบกลับ หากการตอบกลับไม่ใช่สำหรับเธรดที่กำลังรออยู่ การตอบกลับจะเข้าสู่การรออีกครั้ง แต่จะไม่แจ้งเตือนให้เธรดที่รออื่นตรวจสอบคิวการตอบกลับ ด้วยเหตุนี้ ปัญหานี้เกิดขึ้น - person SkyWalker; 20.03.2017
comment
เชื่อมต่อกับ VM เป้าหมาย ที่อยู่: '127.0.0.1:59507' การขนส่ง: 'ซ็อกเก็ต' 20 มี.ค. 2560 18:59:23 น. org.hibernate.Version logVersion INFO: HHH000412: Hibernate Core {5.2.9.Final} 20 มี.ค. 2017 18:59:23 น. org.hibernate.cfg.Environment ‹clinit› ข้อมูล: HHH000206: ไม่พบ hibernate.properties ตัดการเชื่อมต่อจาก VM เป้าหมาย ที่อยู่: '127.0.0.1:59507' การขนส่ง: 'socket' 20 มี.ค. 2017 18:59:24 น. entities.CarScrapperHibernateUtil ‹clinit› SEVERE: null java.lang.NoSuchMethodError: - person Ekaterina Ivanova iceja.net; 20.03.2017
comment
มันล้มเหลวในระหว่างการรันในการดีบัก แต่ทำงานได้ดีโดยไม่ต้องดีบัก มันล้มเหลวในขั้นตอนการเริ่มต้นไฮเบอร์เนต sessionFactory = new Configuration().configure().buildSessionFactory(); ตอนนี้เป็นข้อยกเว้นที่แตกต่างกัน: java.lang.NoSuchMethodError: org.hibernate.annotations.common.reflection.java.JavaReflectionManager.setMetadataProvider(Lorg/hibernate/annotations/common/reflection/MetadataProvider;)V ฉันไม่รู้ว่ามันเกิดขึ้นได้อย่างไร ฉัน ได้เปลี่ยนการพึ่งพาการไล่ระดับ - person Ekaterina Ivanova iceja.net; 20.03.2017
comment
@Catherine คุณใช้เวอร์ชันไฮเบอร์เนตใดอยู่ - person SkyWalker; 20.03.2017
comment
ไฮเบอร์เนตคอร์ {5.2.9.สุดท้าย} - person Ekaterina Ivanova iceja.net; 20.03.2017
comment
มี hibernate-commons-annotations ใน gradle ของคุณหรือไม่? - person SkyWalker; 20.03.2017
comment
คอมไพล์ org.hibernate:hibernate-commons-annotations:+ คุณสามารถดูการอ้างอิงได้ในโพสต์เริ่มต้น - person Ekaterina Ivanova iceja.net; 20.03.2017
comment
ลบส่วนที่ระบุ และทำความสะอาดและสร้าง หวังว่ามันจะแก้ปัญหาของคุณได้ จาก Hibernate v3.6 คลาสคำอธิบายประกอบได้ถูกรวมเข้ากับแกนหลักแล้ว เพียงลบการพึ่งพา hibernate-commons-annotations และสิ่งนี้ควรได้รับการแก้ไข - person SkyWalker; 20.03.2017
comment
วิธีนี้ช่วยแก้ไขปัญหาได้ แต่มีข้อยกเว้น: Table.indexes() เพิ่มขึ้นอีกครั้ง ฉันกำลังอ่านลิงก์ของคุณ - person Ekaterina Ivanova iceja.net; 20.03.2017
comment
@Catherine ในทุก IDE ข้อยกเว้นการหมดเวลาประเภทนี้เกิดขึ้นในเวลาแก้ไขข้อบกพร่องเนื่องจากการรอหลายเธรดเพื่อตอบกลับ อย่างที่ผมได้กล่าวไว้ก่อนหน้านี้ นั่นคือปัญหา - person SkyWalker; 20.03.2017
comment
ฉันได้เพิ่มการคอมไพล์ org.hibernate.javax.persistence:hibernate-jpa-2.1-api:+ แต่สถานการณ์ยังคงเหมือนเดิม ข้อยกเว้นที่สำคัญที่สุดคืออะไรเกิดขึ้นเฉพาะในระหว่างการดีบักเท่านั้น - person Ekaterina Ivanova iceja.net; 20.03.2017
comment
ข้อยกเว้นการหมดเวลาและข้อยกเว้น no suchmethoderror ส่วนใหญ่จะเกิดขึ้นในเวลาแก้ไขข้อบกพร่อง @แคทเธอรีน - person SkyWalker; 20.03.2017