2014-09-29 67 views
0

所以这里是我的问题使用蚂蚁与詹金斯创建战争时的问题

我有一个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> 

我使用詹金斯作为构建服务器(这是托管在不同机种的开发环境中)

我也用Gitlab作为一个资源库,推动最新的代码我有后一个jenkins作业钩,自动触发并调用这个build.xml

现在这里的问题是,当我在我的本地机器上运行这个脚本一切正常,但是当詹金斯执行它在编译阶段失败给我下面的错误。

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. 

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

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

任何人有任何想法如何解决这个问题。

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

回答

1

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

+0

好的,我在这里看到你的观点,一定会试试这个,谢谢 – 2014-09-30 13:33:17