2011-10-07 57 views
0

我正在尝试使用maven生成使用ant任务的hbm文件,但是它遇到了与类路径相关的问题。 (我这样做是为了将项目从ant迁移到maven,并且不想改变hibernate在第一步中的工作方式)。如果有人知道更好的处理方法,那也是有帮助的。我的pom.xml看起来像 maven ant插件问题使用Xdoclet在休眠中生成hbm文件

  <artifactId>maven-antrun-plugin</artifactId> 
      <version>1.6</version> 
      <dependencies> 
       <dependency> 
        <groupId>org.apache.ant</groupId> 
        <artifactId>ant-nodeps</artifactId> 
        <version>1.8.1</version> 
       </dependency> 
       <dependency> 
        <groupId>xdoclet</groupId> 
        <artifactId>xdoclet-hibernate-module</artifactId> 
        <version>1.2.3</version> 
       </dependency> 
       <dependency> 
        <groupId>xjavadoc</groupId> 
        <artifactId>xjavadoc</artifactId> 
        <version>1.1</version> 
       </dependency> 
       <dependency> 
        <groupId>xdoclet</groupId> 
        <artifactId>xdoclet-xdoclet-module</artifactId> 
        <version>1.2.3</version> 
       </dependency> 
       <dependency> 
        <groupId>org.codehaus.xdoclet</groupId> 
        <artifactId>xdoclet</artifactId> 
        <version>2.0.7</version> 
       </dependency> 
       <dependency> 
        <groupId>commons-collections</groupId> 
        <artifactId>commons-collections</artifactId> 
        <version>20040616</version> 
       </dependency> 
       <dependency> 
        <groupId>commons-logging</groupId> 
        <artifactId>commons-logging</artifactId> 
        <version>1.1.1</version> 
       </dependency> 
      </dependencies> 
      <executions> 
       <execution> 
        <phase> generate-sources</phase> 
        <configuration> 
         <target name="generate-hibernate" unless="hibernatedoclet.unnecessary"> 
          <echo level="info">generating hibernate files</echo> 
          <taskdef name="hibernatedoclet" 
           classname="xdoclet.modules.hibernate.HibernateDocletTask" 
           classpathref="maven.plugin.classpath" /> 
          <hibernatedoclet destdir="${project.build.directory}" 
           force="ture" verbose="true"> 
           <fileset id="hbm" dir="${basedir}/src/main/java"> 
            <include name="**/model/*.java" /> 
           </fileset> 
           <hibernate version="3.0" /> 
          </hibernatedoclet> 
         </target> 
        </configuration> 
        <goals> 
         <goal>run</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

,我得到的例外是

Can't create a hibernate element under hibernatedoclet. Make sure the jar file containing the corresponding subtask class is on the classpath specified in the <taskdef> that defined {2}. 
    at xdoclet.DocletTask.createDynamicElement(DocletTask.java:343) 
    at org.apache.tools.ant.IntrospectionHelper.createDynamicElement(IntrospectionHelper.java:57 
    at org.apache.tools.ant.IntrospectionHelper.getNestedCreator(IntrospectionHelper.java:542) 
    at org.apache.tools.ant.IntrospectionHelper.getElementCreator(IntrospectionHelper.java:637) 
    at org.apache.tools.ant.UnknownElement.handleChild(UnknownElement.java:552) 
    at org.apache.tools.ant.UnknownElement.handleChildren(UnknownElement.java:349) 
    at org.apache.tools.ant.UnknownElement.configure(UnknownElement.java:201) 
    at org.apache.tools.ant.UnknownElement.maybeConfigure(UnknownElement.java:163) 
    at org.apache.tools.ant.Task.perform(Task.java:347) 
    at org.apache.tools.ant.Target.execute(Target.java:390) 
    at org.apache.tools.ant.Target.performTasks(Target.java:411) 
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1397) 
    at org.apache.tools.ant.Project.executeTarget(Project.java:1366) 
    at org.apache.maven.plugin.antrun.AntRunMojo.execute(AntRunMojo.java:270) 
+0

为什么使用XDoclet?当Java注释不存在时,XDoclet是XML配置的替代方案。现在存在Java注释,并且可以使用它们配置Hibernate。 –

+0

我计划转到Java注释方式,但分阶段迁移应用程序。在第一步中,想要从蚂蚁迁移到maven而不用触及代码,这就是开始使用xdoclet的原因。 – lalit

回答

1

由于错误说

无法创建休眠下的HibernateDoclet

元素

我想你需要添加hibernate到你的maven ant插件依赖。

+0

通过拉动冬眠罐,它似乎已经解决了这个问题。谢谢你的一样。现在我看到它无法处理Java文件中的泛型。有没有办法让泛型也能处理仿制药。 – lalit

+0

不是。这是使用过时技术的问题。正如JB Nizet已经指出的那样,XDoclet是在Java 5之前开发的,作为在它们作为Java语言结构存在之前近似注释的手段。不幸的是,像泛型这样的好东西在当时并不作为Java语言构造存在 –