如何自动编译大型Java项目?

时间:2009-05-15 18:58:41

标签: eclipse compiler-construction ant jar javac

我正在为我的雇主做一个自动化项目。我们的源代码的每个版本都有一个池。下载修订时,需要创建一个包含一堆第三方包含的目录结构,以最终构建项目。我已经将整个过程自动化,直到让我的脚本(.bat)编译每个特定的可运行java应用程序。这个单一项目有很多应用程序,目录列表如下所示:

Proj Name
   -variousincludesfolder1
   -variousincludesfolder2
   -variousincludesfolder3
   -variousincludesfolder4
   -runnableapplicationsandmoreincludes
       -con.java

现在,我想对con.java进行自动编译,但我不知道从哪里开始。人们建议我尝试使用Ant,但是我使用Eclipse生成的任何自动化Ant文件似乎都足以在存在活动项目文件时构建con.java。有没有使用eclipse自动执行此操作,以便让批处理文件生成.jar本身?

2 个答案:

答案 0 :(得分:6)

这绝对是Ant的工作。不要依赖Eclipse生成的Ant文件;通读manual并自己写一个。 (你可能会发现Ant也会在你的构建脚本中做你想不到的事情。)

更具体地说,here is the documentation for the jar task

答案 1 :(得分:3)

您可以定义通配符和模式匹配,以包含/排除构建中的所有类型的文件和文件夹。请查看Ant manual,了解filesets之类的内容如何使用包含和排除过滤器。

另请阅读tutorial

这是一个简单的构建文件,它可以编译所有java文件并引用所有jar文件。将它放在顶级目录中:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" 
    href="http://www.ibm.com/developerworks/xml/library/x-antxsl/examples/example2/ant2html.xsl"?>
<project name="Proj Name" default="build" basedir=".">
    <property name="src.dir" value="${basedir}" description="base folder where the source files will be found.  Typically under /src, but could be anywhere.  Defaulting to root directory of the project" />
    <property name="build.dir" value="build" description="Where to put build files, separate from src and resource files." />

    <path id="master-classpath">
        <fileset dir="${basedir}" description="looks for any jar file under the root directory">
            <include name="**/*.jar" />
        </fileset>
    </path>

    <target name="build" description="Compile all JAVA files in the project">
        <javac srcdir="${src.dir}" 
            destdir="${build.dir}/classes" 
            debug="true" 
            deprecation="true" 
            verbose="false" 
            optimize="false"  
            failonerror="true">
            <!--master-classpath is defined above to include any jar files in the project subdirectories(can  be customized to include/exclude)-->
            <classpath refid="master-classpath"/>
            <!--If you want to define a pattern of files/folders to exclude from compilation...-->
            <exclude name="**/realm/**"/>
        </javac>  
    </target>

</project>