JDK8 - त्रुटि "javax.interceptor.InterceptorBinding नहीं मिला" के लिए वर्ग फ़ाइल "जब Maven javadoc प्लगइन का उपयोग करके javadoc उत्पन्न करने की कोशिश कर रहा है


85

मैं JDK8 का उपयोग कर रहा हूँ (इसे अपने एक्लिप्स कार्यक्षेत्र पर विन x64 u25 JDK + के साथ लिनक्स पर जेनकींस द्वारा लॉन्च किया गया - jdk-8u20-linux-x64, दोनों के लिए एक ही समस्या है)।

मेरे पास मल्टी-मॉड्यूल मावेन परियोजना है (मैं पैकेजिंग प्रकार "पोम" के साथ एक मुख्य मॉड्यूल से मावेन लक्ष्य "जेवाडोक: कुल" लॉन्च कर रहा हूं)।

पोम बिल्ड सेक्शन इस तरह दिखता है:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <configuration>
                <additionalparam>-Xdoclint:none</additionalparam>
            </configuration>
        </plugin>
    </plugins>
</build>

मुझे हमेशा त्रुटि प्राप्त होती है:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.10.1:aggregate (default-cli) on project uloan-global-build: An error has occurred in JavaDocs report generation:
[ERROR] Exit code: 1 - javadoc: error - com.sun.tools.doclets.internal.toolkit.util.DocletAbortException: com.sun.tools.doclets.internal.toolkit.util.DocletAbortException: com.sun.tools.doclets.internal.toolkit.util.DocletAbortException: com.sun.tools.javac.code.Symbol$CompletionFailure: class file for javax.interceptor.InterceptorBinding not found
[ERROR] 
[ERROR] Command line was: /usr/java/jdk1.8.0_20/jre/../bin/javadoc @options @packages

मैंने हर संभव कोशिश की है और लंबे समय तक Google पर खोज करने की कोशिश की, लेकिन कोई सफलता नहीं मिली। मुझे ऐसे लिंक मिले हैं, जहां लोगों को समान समस्याएं थीं, लेकिन संभावित समाधान के बारे में किसी भी जानकारी के बिना:

http://marc.info/?l=maven-user&m=139615350913286&w=2

http://mail-archives.apache.org/mod_mbox/maven-users/201409.mbox/%3C54101E24.6060304@gmx.de%3E (20 को अपडेट करने के लिए JDK8 को अपडेट करने का सुझाव देते हुए, जो मैंने किया था, लेकिन समस्या अभी भी है वही)।

किसी भी संकेत या किसी ने भी इस तरह के व्यवहार का अनुभव किया (दुर्भाग्य से यह किसी कारण के लिए "दुर्लभ" समस्या के रूप में दिखता है)? इसके बारे में काफी हताश ...


1
क्या आप निश्चित रूप से 8u20 को सही तरीके से स्थापित कर रहे हैं?
23

मुझे GRADLE के साथ भी यही समस्या थी - ऐसा इसलिए था क्योंकि मेरे पास JDK 1.7 मेरे रास्ते पर था, लेकिन JAVA_HOME एक 1.8 JDK की ओर इशारा कर रहा था - धन्यवाद, @JamesB
BretC

मैं एक ही बात मार रहा हूँ, लेकिन मैं 8u31 पर हूँ
RedDeckWins

जवाबों:


140

ऐसा प्रतीत होता है कि javax.transaction.Transactional(या उस मामले के लिए आपके क्लासपाथ में किसी अन्य वर्ग के कारण ) के साथ ही एनोटेट किया जा रहा है javax.interceptor.InterceptorBinding, जो क्लासपाथ में गायब है जब तक कि स्पष्ट रूप से निर्भरता में घोषित नहीं किया गया है:

@Inherited
@InterceptorBinding // <-- this ONE is causing troubles
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface Transactional {

कहा कि:

  • javax.transaction.Transactional- javax.transaction: javax.transaction-api: 1. + (या org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.0.0.Final) के साथ आता है और आमतौर पर JPA / ORM / JMS एप्स में ट्रांजेक्शनल विधियों को एनोटेट करने के लिए उपयोग किया जाता है।
  • javax.interceptor.InterceptorBinding- javax.interceptor: javax.interceptor-api: 1. + के साथ आना चाहिए । लेकिन, यद्यपि शीर्ष पर घोषित किया गया है Transactional, सामान्य ऑपरेशन के लिए आवश्यक नहीं है और (जैसा दिखता है) इस वजह से आपके जेपीए ढांचे की एक सकर्मक निर्भरता के रूप में नहीं लिया जा रहा है।

परिणामस्वरूप JDK8 javadoc टूल स्रोतों को संसाधित करने में विफल रहता है (यदि उनमें से कोई भी एनोटेट है @Transactional)।

यद्यपि यह उस स्थान के बारे में अधिक विशिष्ट हो सकता है जहां यह "त्रुटि" पाई गई है।

समस्या ठीक करें : javax.interceptor:javax.interceptor-api:1.+निर्भरता जोड़ने से समस्या ठीक हो जाती है

<dependency>
    <groupId>javax.interceptor</groupId>
    <artifactId>javax.interceptor-api</artifactId>
    <version>1.2.2</version>
</dependency>

नोट (जनवरी 2020): वर्तमान में नवीनतम (प्रशंसनीय) संस्करण 1.2.2 है (देखें https://mvnrepository.com/artifact/javax.interceptor/javax.interceptor-api


2
हां, इससे मेरे लिए एक समान समस्या हल हो गई। लगता है JDK 8 के javadoc को वर्गपथ में रहने के लिए सकर्मक निर्भरता की आवश्यकता होती है जबकि JDK 7 अधिक संवेदनशील था।
जेसी ग्लिक

11
मावेन निर्भरता है: <निर्भरता> <groupId> javax.interceptor </ groupId> <विरूपण साक्ष्य> javax.interceptor-api </ विरूपण साक्ष्य> <संस्करण> 1.2 </ संस्करण> </ निर्भरता>
टिम वैन डेर Lippe

बहुत बहुत धन्यवाद, @kozlovda, जिसने इसे हल किया। जवाब की जाँच के साथ लंबे समय तक देरी के लिए क्षमा करें - इस बीच कुछ पूरी तरह से अलग काम कर रहा था और पुराने कार्यक्षेत्र में इसे सत्यापित करने का समय नहीं मिल सका :-)
मिशाल एरोन

धन्यवाद @kozlovda इससे बहुत मदद मिली :)
Sercan Ozdemir

8
यह मावेन-जेवाडॉक-प्लगइन की एक अतिरिक्त निर्भरता के रूप में जोड़ना बेहतर है क्योंकि समस्या केवल javadoc पीढ़ी की प्रक्रिया के दौरान एक संघर्ष में निर्भर करती है: <अतिरिक्त निर्भरता> <अतिरिक्त निर्भरता> <GroupId>'avax.interceptor </ groupId> <कलावस्तु> javax.interceptor -पीआई </ विरूपण साक्ष्य> <संस्करण> १.२ </ संस्करण> </ अतिरिक्त
निर्भरता

51

जैसा कि @kozlovda पहले से ही उल्लेख करता है, मुद्दा @Transactionalएनोटेशन ( javax.transaction.Transactional) के साथ आता है ।

यदि आपके पास स्प्रिंग एप्लिकेशन के लिए मावेन रन पर वर्णित त्रुटि है, तो समस्या को हल करने का एक और तरीका भी है: सुनिश्चित करें कि javax.transactionइसके बजाय एनोटेशन का उपयोग न करें org.springframework.transaction.annotation.Transactional

आयात को बदलने से मेरे लिए समस्या ठीक हो गई।


धन्यवाद! मेरे एक नियंत्रक वर्ग के लिए javadoc हमेशा विफल रहा और मैंने सीधे ऐसा क्यों नहीं देखा। यह javax.Transactional पर एक आयात के साथ एकमात्र वर्ग था।
राधेश

2
धन्यवाद, यह सही फिक्स है। यदि आप एक स्प्रिंग एप्लिकेशन लिख रहे हैं, तो आप स्प्रिंग ट्रांजेक्शनल का उपयोग करने वाले हैं, भले ही स्प्रिंग जेवैक्स ईजेबी ट्रांसेक्शनल का समर्थन करता हो। और आपको दो अलग-अलग Transactional को मिलाना नहीं चाहिए। मेरे पास javadoc के साथ एक ही मुद्दा था और मुझे हजारों में से एक कक्षा में पता चला कि मेरे पास javax.transactional आयातित था। जावदोक और इस टिप्पणी ने मुझे असली गलती खोजने में मदद की।
pdenti

यह एक महान जवाब है और, मुझे लगता है, अधिकांश मामलों के लिए सही है। आमतौर पर आप वसंत ऋतु में
@ ट्रान्सैटेक्शनल

12

आप अपने javadoc maven कॉन्फ़िगरेशन में निम्न पंक्ति भी जोड़ सकते हैं <failOnError>false</failOnError>:। यह सभी त्रुटियों को अनदेखा करने और बिल्ड को विफल न होने देने के लिए javadoc निष्पादन को बताएगा।

इसलिए आपका पूरा javadoc प्लगइन कॉन्फिग इस तरह दिखेगा:

<build>
   <plugins>
       <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-compiler-plugin</artifactId>
           <configuration>
               <source>1.8</source>
               <target>1.8</target>
           </configuration>
       </plugin>
       <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-javadoc-plugin</artifactId>
           <configuration>
               <additionalparam>-Xdoclint:none</additionalparam>
               <failOnError>false</failOnError>
           </configuration>
       </plugin>
    </plugins>
</build>

6
यह उत्तर वास्तव में समस्या को संबोधित नहीं करता है, बल्कि इसे छिपाता है। failOnError = true मावेन को बिल्ड जारी रखने की अनुमति देता है, लेकिन JavaDoc aborts के बाद से, सभी फाइलें उत्पन्न नहीं होती हैं। उदाहरण के लिए, सभी अनुक्रमणिका फ़ाइलें उत्पन्न नहीं हो सकती हैं। आप एक सफल JavaDocs के साथ एक निर्माण पर विचार कर सकते हैं?
मार्टीन स्ट्रस

12

@lpratlong एक टिप्पणी में दिए गए जवाब में कहता है "इसे मावेन-जेवाडॉक-प्लगइन के एक अतिरिक्त निर्भरता के रूप में जोड़ें"। मेरे लिए काम किया, यहाँ मेरे जैसे अधीर लोगों के लिए पूरा मावेन प्लगइन प्रविष्टि कॉपी-पेस्ट करने के लिए है:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <!-- <version>3.0.0</version> -->
            <configuration>
                <!-- Silence error javax.interceptor.InterceptorBinding not found -->
                <additionalDependencies>
                    <additionalDependency>
                        <groupId>javax.interceptor</groupId>
                        <artifactId>javax.interceptor-api</artifactId>
                        <version>1.2</version>
                    </additionalDependency>
                </additionalDependencies>
            </configuration>
        </plugin>

संस्करण पर टिप्पणी की गई है क्योंकि मेरे मामले में वसंत-बूट संस्करण का प्रबंधन करता है, बस आवश्यकतानुसार पुनर्स्थापित करें।


1
यह सबसे अच्छा उत्तर IMO है क्योंकि प्लगइन कॉन्फ़िगरेशन के अंदर निर्भरता को जोड़ने से यह स्पष्ट हो जाता है कि यह निर्भरता उस प्लगइन द्वारा आवश्यक है।
pyb

5

उपयोग

import org.springframework.transaction.annotation.Transactional;

के बजाय

import javax.transaction.Transactional;

जब आप स्प्रिंग के साथ @ ट्रान्सैक्टैशनल का उपयोग कर रहे हों


2

इंटरसेप्टर बंधन निम्नलिखित मावेन निर्भरता पर उपलब्ध है:

<dependency>
    <groupId>javax.interceptor</groupId>
    <artifactId>javax.interceptor-api</artifactId>
    <version>1.2</version>
</dependency>


0

मुझे स्प्रिंग-बूट 2 कोटलिन और ग्रेडेल के साथ भी यही समस्या थी। जैसा कि @kozlovda ने सुझाव दिया है:

dependencies {
  compileOnly 'javax.interceptor:javax.interceptor-api:1.+'
  ...

समस्या को ठीक किया


-5

आप अपनी POM फ़ाइल में Maven निर्भरता भी जोड़ सकते हैं। इसने मेरे लिए इस समस्या को हल कर दिया

    <dependency>
        <groupId>net.sourceforge.cobertura</groupId>
        <artifactId>cobertura</artifactId>
        <version>2.1.1</version>
        <scope>compile</scope>
    </dependency>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.