Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Ant编译源代码树的选择性部分_Ant_Compilation_Target_Javac_Conditional Statements - Fatal编程技术网

使用Ant编译源代码树的选择性部分

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

我的处境有点有趣。我正在尝试使用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">
    <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相同的共存类。关于大写字母你是对的,那是我打结构的错误。一直以来都是小写的。