2015-07-02 108 views
0

我正在用maven-ant和eclipse構建掙扎。在eclipse中包含maven-ant構建庫java項目

我沒有像下面的步驟一樣工作。

  • [GUI]新的Java項目
  • 項目頂級文件夾添加build.xml
  • 運行Ant文件,並取得成功!
  • 試圖代碼,但不知何故自動完成不工作。(猜測日食無法讀取Maven的螞蟻dependency.path

所以,我想。

  • 在構建路徑添加~/.m2/repositoryExternal class folder - 不工作 - 它看起來怪我,包括整個這個文件夾。我目前的項目,我需要一個小庫,但它有整個庫,我在其他項目中使用。
  • 添加建設者build.xmlWant an eclipse java project to run ant build files automatically - 也不工作。

如何正確添加這個maven-ant庫?感謝您分享自己的經驗和答案XD

===========額外信息====================

這是我的build.xml

<?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 

僅供參考,我用了一個名爲[線束休眠]由O'Reilly出版詹姆斯艾略特寫的書這樣做。

再次感謝b

回答

1

對於你正在嘗試做的,你需要在你的聲明中filesetId和versionsId =「dependency.versions」:

<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> 

的到=「扁平化」將flaten你的依賴到一個文件夾,然後可以包括Eclipse項目的類路徑或任何你需要的文件夾。

相關問題