使用蚂蚁与詹金斯创造战争时的问题

时间:2014-09-29 18:19:36

标签: java ant build jenkins tomcat7

所以这是我的问题

我有一个ant构建脚本,用于创建war文件。文件内容如下。

<?xml version="1.0" encoding="UTF-8"?>
<project name="TestProj" default="war" basedir=".">
<property name="project-name" value="${ant.project.name}" />
<property name="builder" value="IaasTeam" />
<property name="war-file-name" value="${project-name}.war" />
<property name="source-directory" value="src" />
<property name="classes-directory" value="build/classes" />
<property name="web-directory" value="WebContent" />
<property name="web-xml-file" value="WebContent/WEB-INF/web.xml" />
<property name="lib.dir" value="WebContent/WEB-INF/lib" />
<property name="catalina.home" value="../../outside/project/lib"/>

<tstamp prefix="build-info">
    <format property="current-date" pattern="d-MMMM-yyyy" locale="en" />
    <format property="current-time" pattern="hh:mm:ss a z" locale="en" />
</tstamp>
<property name="build-directory" value="build" />
<path id="classpath">
    <fileset dir="${lib.dir}" includes="**/*.jar"/>
    <fileset dir="${catalina.home}" includes="**/*.jar"/>
</path>
<target name="clean">
     <delete dir="build"/>
</target>
<target name="compile">
      <mkdir dir="build/classes"/>
      <javac includeantruntime="false" srcdir="src" destdir="build/classes" classpathref="classpath" />
</target>
<target name="war" depends="clean,compile">
    <mkdir dir="${build-directory}" />
    <delete file="${build-directory}/${war-file-name}" />
    <war warfile="${build-directory}/${war-file-name}" webxml="${web-xml-file}">
        <classes dir="${classes-directory}" />
        <fileset dir="${web-directory}">
            <!-- Need to exclude it since webxml is an attribute of the war tag above -->
            <exclude name="WEB-INF/web.xml" />
        </fileset>
        <manifest>
            <attribute name="Built-By" value="${builder}" />
            <attribute name="Built-On" value="${build-info.current-date}" />
            <attribute name="Built-At" value="${build-info.current-time}" />
        </manifest>
    </war>
</target>

我使用jenkins作为构建服务器(这是托管在不同机器类型的DEV环境中)

我还使用Gitlab作为存储库,在推送最新代码后,我有一个jenkins作业的钩子,它会自动触发并调用此build.xml

现在的问题是,当我在本地机器上运行此脚本时,一切运行良好但是当Jenkins执行此操作时,它在编译阶段失败,从而导致我出现以下错误。

compile:
[mkdir] Created dir: /app/infra/jenkins/workspace/TestProj/build/classes
[javac] Compiling 49 source files to   /app/infra/jenkins/workspace/TestProj/build/classes

BUILD FAILED
/app/infra/jenkins/workspace/TestProj/build.xml:27:  /app/infra/jenkins/outside/project/lib does not exist.

这个问题的原因是构建服务器没有任何名为outside / project / lib的directoy。

**在我的build.xml中添加此directoy的唯一原因是准备好特定于容器的jar文件进行编译。

任何人都知道如何解决这个问题。?

我是否需要在构建服务器上复制容器特定的jar? 要么 有没有办法告诉詹金斯不要复制这个外部罐子,只是用它们进行编译。 我真的很困惑。请帮忙。**

1 个答案:

答案 0 :(得分:1)

詹金斯在哪里找到罐子?它们需要可访问,否则您的构建将失败。如果您不想签入文件(这是非常明智的),您可以使用Apache Ivy为您下载它们。这是处理您所处情况的最常用方法。使用像Ivy(或Maven,或类似的)依赖管理框架将为您节省很多麻烦。我建议你看看他们的教程。设置完成后,您的ant build将负责下载您需要的文件。