Bonjour,

Voilà, j'ai un petit projet dans lequel j'essaie vainement d'enhancer certaines classes via le plugin JPox.

J'ai une classe sous src/main/java/org/blackdog/type/AudioItem.java.
J'ai placé un fichier jdo sous src/main/resources/org/blackdog/type/AudioItem.jdo. Il ressemble à ca :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0"?>
<!DOCTYPE jdo PUBLIC 
    "-//Sun Microsystems, Inc.//DTD Java Data Objects Metadata 2.0//EN" 
    "http://java.sun.com/dtd/jdo_2_0.dtd">
<jdo>
    <package name="org.blackdog.type">
        <class name="AudioItem" identity-type="datastore">
            <primary-key name="id" column="id"/>
            <field name="name" persistence-modifier="persistent"/>
            <field name="category" persistence-modifier="persistent"/>
        </class>
    </package>
</jdo>
Ce dernier fichier est bien considéré lors de l'appel au plugin jpox. J'ai la trace suivante lors de l'éxécution :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
 
INFO  [JPOX.Enhancer] - JPOX Enhancer : Classpath
JPOX Enhancer : Classpath
INFO  [JPOX.Enhancer] - >>  /mnt/projects/blackdog-types/target/classes
>>  /mnt/projects/blackdog-types/target/classes
INFO  [JPOX.Enhancer] - >>  /mnt/projects/.m2/log4j/log4j/1.2.8/log4j-1.2.8.jar
>>  /mnt/projects/.m2/log4j/log4j/1.2.8/log4j-1.2.8.jar
INFO  [JPOX.Enhancer] - >>  /mnt/projects/.m2/javax/resource/connector/1.0/connector-1.0.jar
>>  /mnt/projects/.m2/javax/resource/connector/1.0/connector-1.0.jar
INFO  [JPOX.Enhancer] - >>  /mnt/projects/.m2/jakarta-regexp/jakarta-regexp/1.4/jakarta-regexp-1.4.jar
>>  /mnt/projects/.m2/jakarta-regexp/jakarta-regexp/1.4/jakarta-regexp-1.4.jar
INFO  [JPOX.Enhancer] - >>  /mnt/projects/.m2/ant/ant/1.6/ant-1.6.jar
>>  /mnt/projects/.m2/ant/ant/1.6/ant-1.6.jar
INFO  [JPOX.Enhancer] - >>  /mnt/projects/.m2/javax/jdo/jdo2-api/2.0/jdo2-api-2.0.jar
>>  /mnt/projects/.m2/javax/jdo/jdo2-api/2.0/jdo2-api-2.0.jar
INFO  [JPOX.Enhancer] - >>  /mnt/projects/.m2/org/apache/bcel/bcel/5.2/bcel-5.2.jar
>>  /mnt/projects/.m2/org/apache/bcel/bcel/5.2/bcel-5.2.jar
INFO  [JPOX.Enhancer] - >>  /mnt/projects/.m2/geronimo-spec/geronimo-spec-jta/1.0.1B-rc2/geronimo-spec-jta-1.0.1B-rc2.jar
>>  /mnt/projects/.m2/geronimo-spec/geronimo-spec-jta/1.0.1B-rc2/geronimo-spec-jta-1.0.1B-rc2.jar
INFO  [JPOX.Enhancer] - >>  /mnt/projects/.m2/jpox/jpox/1.1.6/jpox-1.1.6.jar
>>  /mnt/projects/.m2/jpox/jpox/1.1.6/jpox-1.1.6.jar
INFO  [JPOX.Enhancer] - >>  /mnt/projects/.m2/jpox/jpox-enhancer/1.1.6/jpox-enhancer-1.1.6.jar
>>  /mnt/projects/.m2/jpox/jpox-enhancer/1.1.6/jpox-enhancer-1.1.6.jar
INFO  [JPOX.Enhancer] - >>  /mnt/projects/.m2/javax/transaction/jta/1.0.1B/jta-1.0.1B.jar
>>  /mnt/projects/.m2/javax/transaction/jta/1.0.1B/jta-1.0.1B.jar
INFO  [JPOX.Enhancer] - >>  /opt/maven-2.0.5/lib/maven-plugin-api-2.0.5.jar
>>  /opt/maven-2.0.5/lib/maven-plugin-api-2.0.5.jar
INFO  [JPOX.Enhancer] - >>  /opt/maven-2.0.5/core/plexus-utils-1.1.jar
>>  /opt/maven-2.0.5/core/plexus-utils-1.1.jar
INFO  [JPOX.Enhancer] - >>  /opt/maven-2.0.5/lib/maven-artifact-2.0.5.jar
>>  /opt/maven-2.0.5/lib/maven-artifact-2.0.5.jar
INFO  [JPOX.Enhancer] - >>  /opt/maven-2.0.5/core/plexus-container-default-1.0-alpha-9.jar
>>  /opt/maven-2.0.5/core/plexus-container-default-1.0-alpha-9.jar
 
INFO  [JPOX.Enhancer] - JPOX Enhancer : Input Files
JPOX Enhancer : Input Files
INFO  [JPOX.Enhancer] - >>  /mnt/projects/blackdog-types/target/classes/org/blackdog/type/AudioItem.jdo
>>  /mnt/projects/blackdog-types/target/classes/org/blackdog/type/AudioItem.jdo
 
INFO  [JPOX.Enhancer] - JPOX Enhancer : Using ClassEnhancer "BCEL"
JPOX Enhancer : Using ClassEnhancer "BCEL"
 
WARN  [JPOX.MetaData] - No manager for annotations was found in the CLASSPATH so all annotations are ignored.
ERROR [JPOX.Enhancer] - Class org.siberia.type.AudioItem not found in classpath. :  
ERROR [JPOX.MetaData] - The following error occurred while parsing <class> nested within 
Error parsing file /mnt/projects/blackdog-types/target/classes/org/blackdog/type/AudioItem.jdo : Class org.siberia.type.AudioItem not found in classpath. :  
javax.jdo.JDOFatalException: Class org.siberia.type.AudioItem not found in classpath. :  
        at org.jpox.enhancer.bcel.metadata.BCELClassMetaData.<init>(BCELClassMetaData.java:113)
        at org.jpox.enhancer.bcel.metadata.BCELMetaDataManager.newClassObject(BCELMetaDataManager.java:78)
        at org.jpox.metadata.JDOMetaDataHandler.newClassObject(JDOMetaDataHandler.java:64)
        at org.jpox.enhancer.metadata.EnhancerJDOMetaDataHandler.newClassObject(EnhancerJDOMetaDataHandler.java:56)
        at org.jpox.metadata.JDOMetaDataHandler.startElement(JDOMetaDataHandler.java:215)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501)
        at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(XMLDTDValidator.java:767)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:400)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2740)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:645)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:508)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
        at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
        at javax.xml.parsers.SAXParser.parse(SAXParser.java:395)
        at javax.xml.parsers.SAXParser.parse(SAXParser.java:198)
        at org.jpox.metadata.MetaDataParser.parseMetaDataStream(MetaDataParser.java:236)
        at org.jpox.metadata.MetaDataParser.parseMetaDataFile(MetaDataParser.java:162)
        at org.jpox.enhancer.bcel.metadata.BCELMetaDataManager.parseAndRegisterFile(BCELMetaDataManager.java:215)
        at org.jpox.enhancer.bcel.BCELUtils.getMetaDataForInput(BCELUtils.java:109)
        at org.jpox.enhancer.JPOXEnhancer.main(JPOXEnhancer.java:512)
 
ERROR [JPOX.Enhancer] - Error parsing file /mnt/projects/blackdog-types/target/classes/org/blackdog/type/AudioItem.jdo : Class org.siberia.type.AudioItem not found in classpath. :  
javax.jdo.JDOFatalException: Class org.siberia.type.AudioItem not found in classpath. :  
        at org.jpox.enhancer.bcel.metadata.BCELClassMetaData.<init>(BCELClassMetaData.java:113)
        at org.jpox.enhancer.bcel.metadata.BCELMetaDataManager.newClassObject(BCELMetaDataManager.java:78)
        at org.jpox.metadata.JDOMetaDataHandler.newClassObject(JDOMetaDataHandler.java:64)
        at org.jpox.enhancer.metadata.EnhancerJDOMetaDataHandler.newClassObject(EnhancerJDOMetaDataHandler.java:56)
        at org.jpox.metadata.JDOMetaDataHandler.startElement(JDOMetaDataHandler.java:215)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501)
        at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(XMLDTDValidator.java:767)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:400)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2740)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:645)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:508)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
        at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
        at javax.xml.parsers.SAXParser.parse(SAXParser.java:395)
        at javax.xml.parsers.SAXParser.parse(SAXParser.java:198)
        at org.jpox.metadata.MetaDataParser.parseMetaDataStream(MetaDataParser.java:236)
        at org.jpox.metadata.MetaDataParser.parseMetaDataFile(MetaDataParser.java:162)
        at org.jpox.enhancer.bcel.metadata.BCELMetaDataManager.parseAndRegisterFile(BCELMetaDataManager.java:215)
        at org.jpox.enhancer.bcel.BCELUtils.getMetaDataForInput(BCELUtils.java:109)
        at org.jpox.enhancer.JPOXEnhancer.main(JPOXEnhancer.java:512)
 
JPOX Enhancer completed with success for 0 classes. Consult the log for full details
Visiblement, Il semble que le répertorie contenant les sources compilés soit bien présent dans le classpath considéré par maven (voir ligne 3) !

Peut-être que la façon d'appeler la tâche jpox est erronée. Voici ce que j'ai ajouté dans le pom.xml de manière à ce que la tâche d'enhancement soit appelé après la compilation des classes :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>jpox-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>enhance</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
Bref, un peu paumé... quelqu'un a t-il déjà rencontré ce problème? ou avez vous déjà utilisez un autre plugin pour faire de l'enhancement de classes JDO?

ps : petite précision, j'utilise maven 2.0.5