1

我有以下 ANT 脚本,它在运行时根据 websphere 根目录为我提供了 websphere 库的列表。我需要将生成的字符串转换为单独的路径位置元素

我当前的脚本是

<?xml version="1.0" encoding="UTF-8"?>
<project name="TestPath" basedir="." default="print-dirset">

    <target name="init" description="Define websphere libraries">
        <property name="compile.lib.dir" value="C:\Software\WAS85" />
    </target>
    <target name="print-dirset" depends="init" description="">
        <path id="websphere.libs">
            <dirset dir="${compile.lib.dir}">
                <include name="*" />
            </dirset>
        </path>
        <property name="websphere.libs.list" refid="websphere.libs" />
        <echo message="websphere.libs.list: ${websphere.libs.list}" />
        <pathconvert property="websphere.libs.convert" pathsep="${file.separator}*${path.separator}">
            <path path="${websphere.libs.list}" />
        </pathconvert>
        <echo message="websphere.libs.convert: ${websphere.libs.convert}" />
    </target>
</project>

输出如下字符串

 [echo] websphere.libs.list: C:\Software\WAS85\Scheduler;C:\Software\WAS85\UDDIReg;C:\Software\WAS85\bin;C:\Software\WAS85\configuration;....C:\Software\WAS85\web;C:\Software\WAS85\wlp
 [echo] websphere.libs.convert: C:\Software\WAS85\Scheduler\*;C:\Software\WAS85\UDDIReg\*;C:\Software\WAS85\bin\*;C:\Software\WAS85\configuration\*;...C:\Software\WAS85\web\*;C:\Software\WAS85\wlp

我想将上面的第二个字符串翻译成如下结构

<path id="websphere.classpath">
    <pathelement location="C:\Software\WAS85\Scheduler\*" />
    <pathelement location="C:\Software\WAS85\UDDIReg\*" />
    <pathelement location="C:\Software\WAS85\bin\*" />
    <pathelement location="C:\Software\WAS85\configuration\*" />
......
    <pathelement location="C:\Software\WAS85\web\*" />
    <pathelement location="C:\Software\WAS85\wlp\*" />
</path>

转换中的最后一个元素还需要添加原始字符串中没有的 '\*' 部分。

然后可以与类似的结构一起使用

<path id="compile.classpath">
  <path refid="ext.classpath"/>
  <path refid="websphere.classpath"/>
  <path refid="module.compile.classpath"/>
</path>

上述尝试的目的是通过使用 JDK 1.6 提供的通配符类路径来减少类路径的长度,从 ANT 1.8.2 开始,它在 ANT 中可用。我正在使用 ANT 1.8.4。

我不是 ANT 方面的专家,我可以通过查看示例来解决。

有没有办法实现我想要做的事情?我该怎么做?任何示例都会非常有帮助。

4

2 回答 2

0

通过在 javac 任务中使用 fork="yes" 和 executable="path-to-my-executable" 属性,我能够使通配符部分工作。

我不想标记已回答的问题,因为我的基本问题是关于转换字符串。但是由于收到的答案没有谈到这一点,也没有提到如何让通配符类路径工作,而我的问题的目的是让通配符类路径工作,我在这里为任何试图得到它的人指出了这一点去工作

我仍然需要一些帮助来将分号分隔的字符串转换为如下所示的构造

<path id="websphere.classpath">
    <pathelement location="C:\Software\WAS85\Scheduler\*" />
    <pathelement location="C:\Software\WAS85\UDDIReg\*" />
    <pathelement location="C:\Software\WAS85\bin\*" />
    <pathelement location="C:\Software\WAS85\configuration\*" />
......
    <pathelement location="C:\Software\WAS85\web\*" />
    <pathelement location="C:\Software\WAS85\wlp\*" />
</path>

更新:

我编写了一个自定义 ANT 任务以使通配符类路径正常工作

于 2013-02-03T14:06:02.040 回答
0

如果所有依赖项都驻留在 中C:\Software\WAS85,则可以使用文件集来捕获所有依赖项:

<fileset dir="${compile.lib.dir}" id="compile.files">
  <include name="**/*.java"/>
  <!-- include name="**/*.jar" /-->
</fileset>

然后,您可以compile.filesbuild.xml.

于 2013-01-03T15:35:48.607 回答