Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ANT-将字符串转换为具有位置属性的路径_Ant_Location_Classpath_Pathelement - Fatal编程技术网

ANT-将字符串转换为具有位置属性的路径

ANT-将字符串转换为具有位置属性的路径,ant,location,classpath,pathelement,Ant,Location,Classpath,Pathelement,我有以下ANT脚本,它基于websphere根目录在运行时为我提供了一个websphere库列表。我需要将结果字符串转换为单独的路径位置元素 我现在的剧本是 <?xml version="1.0" encoding="UTF-8"?> <project name="TestPath" basedir="." default="print-dirset"> <target name="init" description="Define websphere l

我有以下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="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>

上述尝试的目的是通过使用JDK1.6提供的通配符类路径来减少类路径的长度,该通配符类路径在ANT启动ANT 1.8.2时可用。我正在使用Ant1.8.4

我不是ANT方面的专家,我只能通过看例子来应付


有没有办法实现我的目标?我怎么做?任何示例都会非常有用。

如果所有依赖项都位于
C:\Software\WAS85
中,则可以使用来捕获所有依赖项:

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


然后,您可以使用在
build.xml
中的其他位置将此文件集称为
compile.files
,我能够通过使用javac任务中的fork=“yes”和executable=“path to my executable”属性使通配符部分工作

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

我仍然需要一些帮助来将分号分隔的字符串转换为下面这样的结构

 [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="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任务,以使通配符类路径工作

在上述构造中使用文件集的问题是,它将在一个目录中列出所有JAR。它也不会给出给定路径下的目录列表。我想使用通配符类路径,如我的问题所示。这不允许我这样做。使用我上面概述的方法,您也可以将该目录和子目录中的所有
.java
文件拉入。如果您试图构建一组类路径位置,可以使用
classpathref
task。注意,它也可以包含目录和文件。我想你还没有完全理解我的问题。如果你读了我的问题,我已经概述了我所拥有的以及我正在努力实现的目标。我不想使用.java文件。根目录包含包含需要添加到类路径的jar文件的目录。我不想添加这些jar文件,我想将它们作为通配符添加。通配符语法的使用不会减少类路径的长度。这里有两个
属性。如果指定
location
属性,则指向的是文件。如果指定
path
属性,则指定该目录。总的来说,将目录添加到类路径与在该目录中添加jar文件列表相同。希望这是清楚的,当然会。如果我在目录中列出JAR,那么用“”列出它的时间会长得多。请看一看-它有以下注释,因为Ant 1.8.2 location属性还可以在其最后一个路径组件中包含通配符(即,它可以以“”结尾),以便支持Java6引入的通配符类路径。Ant不会扩展或计算通配符,生成的路径可能只作为类路径,甚至作为Java6之前的Java VM的类路径。有人知道如何实现我想要的吗?我已经解释了为什么我不想使用给出的文件集答案。它根本没有回答我的问题。如果你找到了解决方法,请给我发个消息!我面临着与您相同的问题。为了验证通配符类路径构造是否确实有效,我还尝试在Windows 7和linux中从命令行进行验证。在这两个测试中,它都是从命令行运行的。我还在构建脚本中“硬编码”类路径。在Windows和linux这两种情况下,它都不能从ANT脚本工作。所以,看起来,即使文档中说它应该适用于ANT 1.8.2或更高版本,它似乎并不适用。@Daniel-我已经回答了问题的通配符部分,但不知道如何向用户发送消息。希望你能回答这个问题谢谢,我已经用通配符找到了解决办法。谢谢你通知我!