使用Ant编译源代码树的选择性部分
我的处境有点有趣。我正在尝试使用Ant创建一个jar文件。但是,我不希望编译每个java文件。我的源代码有如下结构:使用Ant编译源代码树的选择性部分,ant,compilation,target,javac,conditional-statements,Ant,Compilation,Target,Javac,Conditional Statements,我的处境有点有趣。我正在尝试使用Ant创建一个jar文件。但是,我不希望编译每个java文件。我的源代码有如下结构: src -Contact.Java -Contact.hbm.xml -AnotherClass.Java <target name="condition-hibernate" description="check if there is a java and hbm file then call for compile-hibernate"> <co
src
-Contact.Java
-Contact.hbm.xml
-AnotherClass.Java
<target name="condition-hibernate" description="check if there is a java and hbm file then call for compile-hibernate">
<condition property="condition">
<available file="**/*.hbm.xml" />
</condition>
<antcall target="condition-hibernate-part2"/>
</target>
<target name="condition-hibernate-part2" description="check if there is a java and hbm file then call for compile-hibernate">
<javac srcdir="${source.dir}" destdir="${hibernate.dir}">
</target>
因此,我希望在jar文件中包含以下内容:
myjar.jar
-com
--me
---Contact.Class
---Contact.hbm.xml
我不想再有别的班了,班上的人都在那里
有可能和蚂蚁一起做吗
我想到的最好的办法是:
src
-Contact.Java
-Contact.hbm.xml
-AnotherClass.Java
<target name="condition-hibernate" description="check if there is a java and hbm file then call for compile-hibernate">
<condition property="condition">
<available file="**/*.hbm.xml" />
</condition>
<antcall target="condition-hibernate-part2"/>
</target>
<target name="condition-hibernate-part2" description="check if there is a java and hbm file then call for compile-hibernate">
<javac srcdir="${source.dir}" destdir="${hibernate.dir}">
</target>
<>我不认为我可以用Ant来解决我的问题,因为我不能告诉你编译什么和什么不可以(我可以使用排除和包含),但是我想告诉蚂蚁只编译它们旁边有一个*.HB.xml文件的文件。 我认为你应该考虑把不同类型的类分成单独的项目。除了简化打包过程外,还有其他好处:解耦、强制单向编译时依赖等。我不知道如何使用Ant的内置功能实现这一点 但是,如果您无法以任何其他方式解决此问题,则可以实现一个检查
.java
文件是否具有相应的.hbm.xml
文件,例如
与BMSelector相对应的公共类实现FileSelector{
选择公共布尔值(文件basedir,最终字符串文件名,文件f){
Pattern p=Pattern.compile(“^(+).java$”;
Matcher m=p.Matcher(文件名);
布尔匹配=m.matches();
如果(!匹配){
返回false;
}
最终字符串basename=m.group(1);
字符串[]foundFiles=basedir.list(新文件名过滤器(){
@凌驾
布尔接受(文件目录,字符串名称){
返回name.startsWith(basename)和name.endsWith(“.hbm.xml”);
}
});
返回foundFiles.length>0;
}
}
在build.xml中使用它,就像在include中使用它一样
这只是基本的想法。(我没有测试代码。)
更好的方法是在构建中避免这种复杂的依赖关系。假设Contact.java不依赖于另一个class.java,这是可行的。在javac
标记中使用(链接在Ant文档的“概念和类型”下)
以下是一个例子:
<javac srcdir="${source.dir}" destdir="${hibernate.dir}">
<filename name="Contact.Java" />
<javac>
或
顺便说一下,Java文件扩展名的命名约定只使用小写字母,即.Java
,而不是.Java
(和.class
)。如果您使用的是像大多数Windows文件系统一样不区分大小写的文件系统,这可能无关紧要,但您仍然应该这样做,以避免以后发生意外。)啊,从这个问题中我不明白,他只想要那些具有相应.hbm.xml
文件的文件。不过这是有道理的。如果我不想触及代码的复杂性,我相信这将是最好的解决方案。也许你应该重新表述一下你的问题。比如说,您只需要具有相应的.hbm.xml文件的Java类。我假设有任意数量的.Java文件需要编译,而这些文件在构建时是未知的。或者,至少shahin不想在构建文件中列出所有这些类。如果我没有详细解释的话,我很抱歉。因此,唯一需要检查的标准是一个具有不同扩展名但fimename相同的共存类。关于大写字母你是对的,那是我打结构的错误。一直以来都是小写的。