标签: taskdef

如何为Ant构建配置Ivy

我目前ANT_HOME找到了/home/<myuser>/ant/1.8.4/ant-1.8.4.

我刚刚下载了包含其依赖项的Apache Ivy tarball.我把它提取到了/home/<myuser>/ivy/2.3.0-rc1/ivy-2.3.0-rc1.

然后我复制/home/<myuser>/ivy/2.3.0-rc1/ivy-2.3.0-rc1/lib/*.jarANT_HOME/lib.如果我理解Ant如何使用插件/扩展是正确的,那么Ant现在应该能够在运行时访问所有Ivy的任务.

我的下一个问题是,如何在我的Ant构建文件中定义常春藤任务?说我想用ivy-retrieve,ivy-resolveivy-publish任务.当我从命令行运行Ant构建时,我需要做的所有配置(在XML中)以使这些任务正常工作(我不会通过Ant-Eclipse插件构建).提前致谢!

java ant build.xml ivy taskdef

16
推荐指数
2
解决办法
3万
查看次数

为什么Ant taskdef无法加载./net之外的资源

当使用taskdef声明外部ant任务时,例如ant-contrib,建议的设置是使用followin taskdef:

<taskdef resource="net/sf/antcontrib/antcontrib.properties">
  <classpath>
    <pathelement location="lib/ant-contrib/ant-contrib-1.0b3.jar"/>
  </classpath>
</taskdef>
Run Code Online (Sandbox Code Playgroud)

当antcontrib.properties位于net/sf/antcontrib相对于build.xml文件时,这种方法有效.

但是当我把它放在lib/net/sf/antcontrib中并将taskdef更改为

<taskdef resource="lib/net/sf/antcontrib/antcontrib.properties">
  <classpath>
    <pathelement location="lib/ant-contrib/ant-contrib-1.0b3.jar"/>
  </classpath>
</taskdef>
Run Code Online (Sandbox Code Playgroud)

Ant无法找到属性文件,它会给出错误

[taskdef] Could not load definitions from resource
lib/net/sf/antcontrib/antcontrib.properties. It could not be found.
Run Code Online (Sandbox Code Playgroud)

似乎ant分别处理lib目录并且无法从那里加载taskdef资源.

ant taskdef

11
推荐指数
1
解决办法
4万
查看次数

taskdef的类路径?

我在Ant中定义了一个新任务.我将其导出为jar并添加到我的构建文件中:

<taskdef classname="X" classpath="Y.jar"/>
Run Code Online (Sandbox Code Playgroud)

问题是这在运行时失败了.它告诉我它没有找到班级.通过将jar添加到类路径,它已得到纠正.

我的问题是:有没有办法可以从Ant构建文件中引用我的jar,而不更改类路径?

ant classpath taskdef

11
推荐指数
2
解决办法
2万
查看次数

如何为不同的ant任务提供自定义log4j.xml?

我有一个构建文件,作为构建过程的一部分依赖于几个taskdef.这些taskdef项(例如,webdoclet和jasper2)使用log4j作为记录器.理想情况下,我希望能够为每个提供不同的log4j配置文件,但最低限度,我希望能够指定使用哪个log4j配置文件.

我以前做的工作是在类路径的前面放置包含我希望taskdef使用的log4j.xml的目录.例如:

<target name="define.jasper2">
  <path id="jspc.classpath">
      <!-- Put this FIRST so Jasper will find the log4j.xml in the Build directory -->
      <pathelement location="Build"/>
      <fileset dir="${tomcat.libs}">
             ....
      </fileset>
      <pathelement location="${log4j.jar}"/>
      ....
  </path>

  <taskdef name="jasper2" classname="org.apache.jasper.JspC" classpathref="jspc.classpath"/>
</target>

事实上,我已经验证了"Build"目录位于类路径的前面,并且该目录中存在log4j.xml.但是,当我在调试时使用log4j以详细模式运行ant时,我看到log4j正在选择当前工作目录中的log4j.xml ,这不是我想要的.Log4j似乎没有使用类路径来解析默认的log4j.xml.

我正在使用log4j 1.2.8(嵌入在一个更大的框架中,所以我无法升级它),其中一些taskdef似乎依赖于commons-logging 1.0.3.构建过程使用Sun Java 5.

如果我set ANT_OPTS=-Dlog4j.configuration=Build/log4j.xml在运行ant之前,taskdefs正确加载了所需的log4j.xml.

将"Bu​​ild"目录放在类路径的前面,用于工作的taskdef.我不知道改变了什么.如何恢复我可以控制的行为 - 在build.xml中 - 哪个log4j配置文件用于给定任务?除了设置ANT_OPTS以外,还有其他方法可以将应用程序的log4j.xml移出当前工作目录以使log4j找到正确的log4j.xml文件吗?

java ant log4j taskdef

5
推荐指数
1
解决办法
1万
查看次数

Ant taskdef需要什么类路径?

我是Ant的新手.有人可以告诉我为taskdef的'classpathref'提供什么值?它会是类文件的路径吗?如果是,可以给出一个例子,因为我尝试了它并且它不适合我.

ant taskdef

5
推荐指数
1
解决办法
2万
查看次数

Ant taskdef - 耗尽PermGen空间

使用创建子项目,如Ant任务 <antcall>,并<ant>可能导致测试失败重复调用因下列错误之一时:

  • java.lang.OutOfMemoryError:PermGen空间
  • java.lang.OutOfMemoryError:Java堆空间

只有在使用<typedef><taskdef>使用捆绑的任务时才会出现调用的任务之一时出现错误,例如<javadoc>.

有没有办法避免OutOfMemoryError不增加最大Java堆大小?虽然增加堆大小可以工作一段时间,但如果添加更多内存密集型任务,问题仍然会重新出现.


以下示例任务和关联build.xml文件导致 OutOfMemoryError我的Linux机箱上的Java堆设置为10 MB(用于测试).Ant任务构造了一个需要内存的对象(在这种情况下是一个Closure模板大豆模块的Guice注入器),然后使用它重复调用<antcall>.

 

CreateGuiceInjectorTask.java

import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.template.soy.SoyModule;

import org.apache.tools.ant.Task;

/** Custom Ant task that constructs a Guice injector. */
public final class CreateGuiceInjectorTask extends Task {
  private Injector injector;

  public CreateGuiceInjectorTask() {
    injector = Guice.createInjector(new SoyModule());
  }

  public void execute() {
    System.out.println("Constructed Guice injector...");
  }
}
Run Code Online (Sandbox Code Playgroud)

 

build.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project name="out-of-memory-test" basedir="."> …
Run Code Online (Sandbox Code Playgroud)

java ant typedef out-of-memory taskdef

4
推荐指数
1
解决办法
4884
查看次数

标签 统计

ant ×6

taskdef ×6

java ×3

build.xml ×1

classpath ×1

ivy ×1

log4j ×1

out-of-memory ×1

typedef ×1