求助 ,Ant 编译多个工程,依赖关系处理问题??

hanbran 发布于 2012/03/02 16:20
阅读 6K+
收藏 1

小弟现在用ant工具整合编译

ant 编译多个工程,如:A、B、C,A 工程 可单独编译,B 工程 依赖A,C工程依赖A、B,问题就出来,A工程编译成功,在编译B工程的时候发现B中有调用C工程的类导致编译错误,找不到类。

 

代码如下:

Xml代码 
  1. <span style="white-space: pre;">    </span><path id="Bclasspath">  
  2.         <fileset dir="${A.dir}/dest" includes="A.jar" />  
  3.     </path>  
Xml代码 
  1. <target name="Abuild">  
  2.     <javac includeantruntime="on" srcdir="${Asrc.dir}/" destdir="${Abuild.dir}" />  
  3.     <mkdir dir="${Abuild.dir}/META-INF" />  
  4.     <copy todir="${Abuild.dir}/META-INF">  
  5.         <fileset dir="${A.dir}/ejbModule/META-INF/" />  
  6.     </copy>  
  7.     <copy todir="${Abuild.dir}">  
  8.         <fileset dir="${A.dir}/ejbModule/" includes="**.*" />  
  9.     </copy>  
  10. </target>  
  11. <target name="Ajar" depends="Abuild">  
  12.     <jar destfile="${Adest.dir}/A.jar" basedir="${Abuild.dir}" />  
  13. </target>  
  14. <target name="Bbuild" depends="Ajar">  
  15.     <javac includeantruntime="on" srcdir="${Bsrc.dir}/" destdir="${Bbuild.dir}" debug="true" debuglevel="lines,source" encoding="utf-8">  
  16.         <classpath refid="Bclasspath" />  
  17.     </javac>  
  18. </target>  

 求助高手,如何才能将A、B、C三个工程成功编译?

加载中
0
杨延庆
杨延庆
你的B工程怎么会引用C工程的类?这样交叉引用编译是不行的,还是改一下B项目的引用
0
h
hanbran

都是老代码且涉及代码较多,这是最初架构组没弄好导致的,现在也没办法改了。只能另想别的办法

有个疑问,既然整个workspace在IDE里是可以正常编译的,那用ant问什么不行呢?

0
杨延庆
杨延庆

因为eclipse背后做了很多工作,包括库的引用等

但是如果你自己用ant命令的话,就需要设置很多东西,比如环境变量,库路径的设置等

你先编译一个jar包吧,用jar包引用,把工程引用改为jar文件引用,再编译试试?

0
naixijuil
naixijuil

我现在也遇到了,用ant编译时,工程依赖关系。  我的工程A  B  ,代码是相互依赖的。

ant有办法在编译时指定工程依赖吗?

0
杨延庆
杨延庆
这种交互引用是大忌,你先修改一下你的代码吧,不然ant编译时如何确定项目的先后顺序?
0
naixijuil
naixijuil
不知各位是否熟悉maven, 像上面情况 maven是否可以处理呢
0
VilenEera
VilenEera

听别人说Apache Ivy可以,不过很复杂.

0
weinan2087
weinan2087
你问的问题很好,我也真在做有关项目的依赖,我现在我也在考虑这种情况,谁有成熟的Demo,贴出来给大家分享一下,谢谢。
0
麦当猫
麦当猫

编译B工程时,把A、B、C的源码都加到sourcepath里面应该就可以

<target name="compile" depends="init">
<javac srcdir="${BillSyssrc}" destdir="${destdir}" encoding="UTF-8">
<classpath refid="libpath"/>
<sourcepath refid="sourcepath"/>
</javac>
</target>

但这样做的结果,会把ABC项目的源码编译到一起。所以只能进行两次变异,第一次用以上方法编译出必须的class文件,第二次编译将第一次编译出的class作为classpath就可以了

http://blog.csdn.net/binbinxyz/article/details/7367892


返回顶部
顶部