2

javax.persistence.Id을 파일에 주석으로 추가하고 Maven JAXB 플러그인을 통해 Java 객체로 생성하려고합니다. 그러나 클래스 javax.persistence.id에 대한 예외를 발견하지 못했습니다 javax.persistence maven 종속성에 포함되어 있는지 확인했다 및 종속성으로 당기는 maven 볼 수 있지만 jaxb 플러그 인을 통해 실행할 때 작동하지 않습니다. 여기 maven jaxb 플러그인을 통해 주석을 생성 할 수 없음

  1. 여기
    1. 내 관련의 pom.xml

      ,691,363 내 인 binding.xjb 파일
    <jaxb:bindings version="2.1" 
        xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
        xmlns:xs="http://www.w3.org/2001/XMLSchema" 
        xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
        xmlns:annox="http://annox.dev.java.net" jaxb:extensionBindingPrefixes="annox"> 
    
    <jaxb:bindings schemaLocation="mytable.xsd"> 
    
        <jaxb:bindings node="xs:complexType[@name='MyTable']/xs:sequence/xs:element[@name='id']"> 
         <annox:annotate target="field"> 
          <annox:annotate annox:class="javax.persistence.Id"/> 
         </annox:annotate> 
        </jaxb:bindings> 
    
    </jaxb:bindings> 
    
    내 XML <xsd:complexType name="MyTable"> <xsd:sequence> <xsd:element name="id" type="xsd:int"/> </xsd:sequence> </xsd:complexType> 여기
  2. 입니다210
    <dependencies> 
        <dependency> 
         <groupId>javax.xml.bind</groupId> 
         <artifactId>jaxb-api</artifactId> 
         <version>2.2.9</version> 
        </dependency> 
        <dependency> 
         <groupId>org.jvnet.jaxb2_commons</groupId> 
         <artifactId>jaxb2-basics</artifactId> 
         <version>0.6.4</version> 
        </dependency> 
        <dependency> 
         <groupId>org.jvnet.jaxb2_commons</groupId> 
         <artifactId>jaxb2-basics-annotate</artifactId> 
         <version>0.6.4</version> 
        </dependency> 
        <dependency> 
        <groupId>javax.persistence</groupId> 
        <artifactId>persistence-api</artifactId> 
        <version>1.0.2</version> 
        <scope>provided</scope> 
    </dependency> 
    </dependencies> 
    
    <build> 
        <plugins> 
         <plugin> 
          <groupId>org.jvnet.jaxb2.maven2</groupId> 
          <artifactId>maven-jaxb2-plugin</artifactId> 
          <version>0.8.3</version> 
          <executions> 
           <execution> 
            <phase>generate-sources</phase> 
            <configuration> 
             <forceRegenerate>true</forceRegenerate> 
             <schemaDirectory>myschema</schemaDirectory> 
             <bindingIncludes> 
              <include>binding.xjb</include> 
             </bindingIncludes> 
             <extension>true</extension> 
             <args> 
             <arg>-Xvalue-constructor</arg> 
             <arg>-XtoString</arg> 
             <arg>-Xequals</arg> 
             <arg>-XhashCode</arg> 
             <arg>-Xcopyable</arg> 
             <arg>-Xannotate</arg> 
            </args> 
             <plugins> 
          <plugin>       <groupId>org.jvnet.jaxb2_commons</groupId> 
    

    JAXB2 - 기초 0.6.4

    org.jvnet.jaxb2_commons JAXB2 - 기초 - 주석 0.6.4 org.jvnet.jaxb2_commons JAXB2 값-생성자 3.0

    </plugins> 
            </configuration> 
            <goals> 
             <goal>generate</goal> 
            </goals> 
           </execution> 
          </executions> 
         </plugin> 
        </plugins> 
        <pluginManagement> 
         <plugins> 
          <plugin> 
           <groupId>org.eclipse.m2e</groupId> 
           <artifactId>lifecycle-mapping</artifactId> 
           <version>1.0.0</version> 
           <configuration> 
            <lifecycleMappingMetadata> 
             <pluginExecutions> 
              <pluginExecution> 
               <pluginExecutionFilter> 
                <groupId>org.jvnet.jaxb2.maven2</groupId> 
                <artifactId>maven-jaxb2-plugin</artifactId> 
                <versionRange>[0.7.4,)</versionRange> 
                <goals> 
                 <goal>generate</goal> 
                </goals> 
               </pluginExecutionFilter> 
               <action> 
                <ignore></ignore> 
               </action> 
              </pluginExecution> 
             </pluginExecutions> 
            </lifecycleMappingMetadata> 
           </configuration> 
          </plugin> 
         </plugins> 
        </pluginManagement> 
    </build> 
    

그러나 메이븐을 실행 -> 생성 - 소스을이 오류

Caused by: org.jvnet.annox.parser.AnnotationElementParseException: Could not parse the annotation element. 
    at org.jvnet.annox.parser.XAnnotationParser.parse(XAnnotationParser.java:90) 
    at org.jvnet.jaxb2_commons.plugin.annotate.AnnotatePlugin.annotate(AnnotatePlugin.java:387) 
    ... 31 more 
Caused by: org.jvnet.annox.annotation.AnnotationClassNotFoundException: Annotation class [javax.persistence.Id] could not be found. 
    ... 33 more 
Caused by: java.lang.ClassNotFoundException: javax.persistence.Id 

단순히 그때 추가 할 수 있습니다 내가 javax.persistence.Id가 함께 수입하기 참조 프로젝트의 모든 자바 클래스에 @Id 주석을 추가하는 경우를 얻을 문제 없어. maven & binding.xjb를 사용할 때 무엇이 ​​잘못 될까요? 특수 효과를 제대로 정의하지 않습니까? 많은 감사합니다!

답변

10

내가 또한 내가 가지고 같은 문제 같아요 :하지만 당신의 JAXB 플러그인에 대한 종속성과 같은, 당신은 메이븐 종속성으로 javax.persistence 추가 :

가 (당신이 최대 절전 모드를 사용하는 경우) 이런 식으로 뭔가를 추가 :

</project> 
    ... 
    <build> 
     <plugins> 
     <plugin> 
      <groupId>org.jvnet.jaxb2.maven2</groupId> 
      <artifactId>maven-jaxb2-plugin</artifactId> 
      <version>${maven-jaxb2-plugin.version}</version> 
      <executions> 
      ... 
      </executions> 
      <configuration> 
      ... 
      </configuration> 
      <dependencies> 
      <!-- Hibernate Persistence Annotations --> 
      <dependency> 
       <groupId>org.hibernate.javax.persistence</groupId> 
       <artifactId>hibernate-jpa-2.0-api</artifactId> 
       <version>${hibernate-jpa-2.0-api.version}</version> 
      </dependency> 
      </dependencies> 
     </plugin> 
     </plugins> 
    </build> 
    ... 
</project> 

나는 비슷한 문제가있어이를 해결할 수있었습니다. 다음 예제에서는 주석을 XSD 파일에 넣지 않고 Maven 구성을 비슷하게 설정해야합니다. 나도 같은 예외를했다

... 
<properties> 
    ... 
    <maven-jaxb2-plugin.version>0.8.3</maven-jaxb2-plugin.version> 
    <jaxb2-basics.version>0.6.4</jaxb2-basics.version> 
    <jaxb2-value-constructor.version>3.0</jaxb2-value-constructor.version> 
    <solr-solrj.version>4.3.0</solr-solrj.version> 
    <jackson.version>2.2.2</jackson.version> 
    <hibernate-jpa-2.0-api.version>1.0.1.Final</hibernate-jpa-2.0-api.version> 
    ... 
</properties> 
... 
<build> 
    <plugins> 
    ... 
    <!-- Generate Java sources from XSD schema files --> 
    <plugin> 
     <groupId>org.jvnet.jaxb2.maven2</groupId> 
     <artifactId>maven-jaxb2-plugin</artifactId> 
     <version>${maven-jaxb2-plugin.version}</version> 
     <executions> 
     <execution> 
      <goals> 
      <goal>generate</goal> 
      </goals> 
     </execution> 
     </executions> 
     <configuration> 
     <extension>true</extension> 
     <args> 
      <arg>-Xannotate</arg> 
      <arg>-Xvalue-constructor</arg> 
      <arg>-Xinheritance</arg> 
      <arg>-enableIntrospection</arg> 
     </args> 
     <!-- Include our schema --> 
     <schemaDirectory>src/main/resources</schemaDirectory> 
     <schemaIncludes> 
      <include>certificate.xsd</include> 
     </schemaIncludes> 
     <bindingIncludes> 
      <bindings>certificate.xjb</bindings> 
     </bindingIncludes> 
     <generateDirectory>src/main/java</generateDirectory> 
     <generatePackage>com.company.project.generated</generatePackage> 
     <plugins> 
      <plugin> 
      <groupId>org.jvnet.jaxb2_commons</groupId> 
      <artifactId>jaxb2-basics</artifactId> 
      <version>${jaxb2-basics.version}</version> 
      </plugin> 
      <plugin> 
      <groupId>org.jvnet.jaxb2_commons</groupId> 
      <artifactId>jaxb2-basics-annotate</artifactId> 
      <version>${jaxb2-basics.version}</version> 
      </plugin> 
      <plugin> 
      <groupId>org.jvnet.jaxb2_commons</groupId> 
      <artifactId>jaxb2-value-constructor</artifactId> 
      <version>${jaxb2-value-constructor.version}</version> 
      </plugin> 
     </plugins> 
     </configuration> 
     <dependencies> 
     <!-- SolrJ - only needed for the @Field annotation --> 
     <dependency> 
      <groupId>org.apache.solr</groupId> 
      <artifactId>solr-solrj</artifactId> 
      <version>${solr-solrj.version}</version> 
     </dependency> 

     <!-- Jackson2 Annotations --> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-annotations</artifactId> 
      <version>${jackson.version}</version> 
     </dependency> 

     <!-- Hibernate Persistence Annotations --> 
     <dependency> 
      <groupId>org.hibernate.javax.persistence</groupId> 
      <artifactId>hibernate-jpa-2.0-api</artifactId> 
      <version>${hibernate-jpa-2.0-api.version}</version> 
     </dependency> 
     </dependencies> 
    </plugin> 
    ... 
    </plugins> 
</build> 

, 이것은 그것을 고정 :

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.1" 
    elementFormDefault="qualified" targetNamespace="http://www.gl-group.com/ewelding/schemas" 
    xmlns:ew="http://www.companyname.com/project/schemas" 
    xmlns:xmime="http://www.w3.org/2005/05/xmlmime" jaxb:extensionBindingPrefixes="annox" 
    xmlns:annox="http://annox.dev.java.net" 
    xmlns:ja="http://annox.dev.java.net/javax.xml.bind.annotation" 
    xmlns:jpa="http://annox.dev.java.net/javax.persistence" 
    xmlns:solrj="http://annox.dev.java.net/org.apache.solr.client.solrj.beans" 
    xmlns:jackson="http://annox.dev.java.net/com.fasterxml.jackson.annotation"> 

... 
<xs:element name="Certificate"> 
    <xs:annotation> 
    <xs:appinfo> 
     <annox:annotate> 
     <ja:XmlAccessorType value="NONE"/> 
     <jpa:Entity name="Certificate"/> 
     <solrj:Field value="testByOrderOf"/> 
     <jackson:JsonFormat shape="STRING" pattern="yyyy-MM-dd'T'HH:mm:ss'Z'" timezone="GMT"/> 
     </annox:annotate> 
    </xs:appinfo> 
    </xs:annotation> 
    ... 
    <xs:element ref="ew:dateOfBirth"> 
    <xs:annotation> 
     <xs:appinfo> 
     <annox:annotate target="field"> 
      <solrj:Field value="dateOfBirth"/> 
      <jackson:JsonFormat shape="STRING" pattern="yyyy-MM-dd'T'HH:mm:ss'Z'" timezone="GMT"/> 
     </annox:annotate> 
     </xs:appinfo> 
    </xs:annotation> 
    </xs:element> 
    ... 
</xs:element> 

그리고 여기 내 pom.xml에서 관련 부분은 다음과 같습니다

여기 내 XSD입니다. 내 예제가 XSD가 아닌 XSD에 모든 것을 집어 넣는다는 사실을 알고 있어야한다. 그러나 위에서 언급 한 의존성 문제가 도움이 될 것이다.

관련 문제