gpt4 book ai didi

java - 使用 ant 和 Jenkins 发起 war 时出现问题

转载 作者:行者123 更新时间:2023-12-01 12:28:57 27 4
gpt4 key购买 nike

我有一个 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 作业的钩子(Hook),它会自动触发并调用此 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 的目录。

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

如何解决这个问题?

我需要在构建服务器上复制容器特定的 jar 吗?或者有什么办法告诉 Jenkins 不要复制这个外部 jar,而只是使用它们进行编译。

最佳答案

Jenkins 在哪里可以找到 jar ?它们需要可访问,否则您的构建将会失败。如果您不想 checkin 文件(这是非常明智的),您可以使用 Apache Ivy为您下载它们。

这是处理您遇到的情况的最常见方法。使用像 Ivy(或 Maven 或类似的)这样的依赖管理框架将为您省去很多麻烦。我建议你看看他们的教程。设置完成后,您的 ant 构建将负责下载您需要的文件。

关于java - 使用 ant 和 Jenkins 发起 war 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26106310/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com