2014-09-29 72 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