在eclipse java项目中包含maven-ant构建库

时间:2015-07-02 08:39:33

标签: java eclipse maven ant maven-ant-tasks

我正在使用eclipse与maven-ant构建进行斗争。

我确实像下面的步骤那样工作。

  • [GUI]新java项目
  • 在项目顶部文件夹中添加build.xml
  • 运行ant文件并成功!
  • 尝试编码,但不知何故自动完成不起作用。(猜测eclipse无法读取maven-ant dependency.path

所以我试过了。

  • 在构建路径中添加~/.m2/repository作为External class folder - 不起作用 - 包含整个此文件夹对我来说很奇怪。我目前的项目,我需要很少的库,但它有我在其他项目中使用的整个库。
  • 使用build.xml build.xml添加构建器 - 不起作用。

如何正确添加这个maven-ant库?感谢您分享您的经验和答案XD

===========额外信息====================

这是我的<?xml version="1.0" encoding="UTF-8"?> <project name="HibernateEx2" default="db" basedir="." xmlns:artifact="antlib:org.apache.maven.artifact.ant"> <property name="source.root" value="src"/> <property name="class.root" value="classes"/> <property name="data.dir" value="data"/> <artifact:dependencies pathId="dependency.classpath"> <dependency groupId="hsqldb" artifactId="hsqldb" version="1.8.0.10"/> <dependency groupId="org.hibernate" artifactId="hibernate-core" version="4.3.10.Final"> <exclusion groupId="javax.transaction" artifactId="jta"/> </dependency> <!-- 3.2.4.GA - After hibernate4 need upgrade hibernate-tools --> <dependency groupId="org.hibernate" artifactId="hibernate-tools" version="4.3.1.CR1"/> <dependency groupId="org.apache.geronimo.specs" artifactId="geronimo-jta_1.1_spec" version="1.1.1"/> <!-- java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory --> <dependency groupId="commons-logging" artifactId="commons-logging" version="1.2"/> <dependency groupId="log4j" artifactId="log4j" version="1.2.17"/> <!-- java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder --> <dependency groupId="org.slf4j" artifactId="slf4j-log4j12" version="1.7.12"/> </artifact:dependencies> <path id="project.class.path"> <pathelement location="${class.root}"/> <path refid="dependency.classpath" /> </path> <!-- Explaining how to use hibernate --> <taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask" classpathref="project.class.path"/> <target name="db" description="Run HSQLDB database management UI against the database file -- use when application is not running"> <java classname="org.hsqldb.util.DatabaseManager" fork="yes"> <classpath refid="project.class.path"/> <arg value="-driver"/> <arg value="org.hsqldb.jdbcDriver"/> <arg value="-url"/> <arg value="jdbc:hsqldb:${data.dir}/music/"/> <arg value="-user"/> <arg value="sa"/> </java> </target> <target name="print-classpath" description="Show the dependency class path"> <property name="class.path" refid="dependency.classpath"/> <echo>${class.path}</echo> </target> <!-- Generate java code --> <target name="codegen" description="Generate Java source from the OR mapping files"> <hibernatetool destdir="${source.root}"> <configuration configurationfile="${source.root}/hibernate.cfg.xml"/> <hbm2java/> </hibernatetool> </target> <!-- Creating Sub drectories --> <target name="prepare" description="Set up build structures"> <mkdir dir="${class.root}"/> <copy todir="${class.root}"> <fileset dir="${source.root}"> <include name="**/*.properties"/> <include name="**/*.xml"/> </fileset> </copy> </target> <!-- Creating Schema for mapping files --> <target name="schema" depends="prepare" description="Generate DB schema from the OR mappinf files"> <hibernatetool destdir="${source.root}"> <configuration configurationfile="${source.root}/hibernate.cfg.xml"/> <hbm2ddl drop="yes"/> </hibernatetool> </target> <!-- Compile Java --> <!-- added includeantruntime="false" to javac, since terminal compile warning --> <target name="compile" depends="prepare"> <javac srcdir="${source.root}" destdir="${class.root}" debug="on" optimize="off" deprecation="on" includeantruntime="false"> <classpath refid="project.class.path"/> </javac> </target> <target name="ctest" depends="compile"> <java classname="org.owls.ht.CreateTest" fork="true"> <classpath refid="project.class.path"/> </java> </target> </project>

src
-- source codes (includes hibernate.cfg.xml)
classes
-- compiled classes
data
-- logs and queries
build.xml

这就是我的项目的样子。

bisect

仅供参考,我正在用O'reilly的James Elliot写的一本名为[[Harness Hibernate]的书来做这件事。

再次感谢b

1 个答案:

答案 0 :(得分:1)

对于您要做的事情,您需要filesetId和versionsId =&#34; dependency.versions&#34;在您的声明中:

 <artifact:dependencies filesetId="dependency.fileset" versionsId="dependency.versions"

然后像这样添加一个复制任务:

 <copy todir="${lib.dir}">
   <fileset refid="dependency.fileset" />
   <mapper classpathref="maven-ant-tasks.classpath"
      classname="org.apache.maven.artifact.ant.VersionMapper"
      from="${dependency.versions}" to="flatten" />
 </copy>

to =&#34; flatten&#34;将您的依赖项展开到一个文件夹中,然后您可以将该文件夹包含在eclipse项目的类路径中或您需要的任何位置。