Java 使用Ant构建后更改类路径
我有客户机、服务器和客户机+服务器构建文件。它们在这里:Java 使用Ant构建后更改类路径,java,xml,ant,Java,Xml,Ant,我有客户机、服务器和客户机+服务器构建文件。它们在这里: 编辑:我要说清楚,我现在唯一遇到问题的文件是服务器。我只是为了展示它们是如何联系在一起的,而没有必要去看它们 我遇到的问题是服务器。我将所有库与服务器ear捆绑在一起,但是当创建类路径时,库的相对位置是。/。我需要这是。/../。如果我在生成时将类路径转换为。/../,那么它将找不到库,因为它在生成之后才位于该位置 我能不能让这个ant构建在jar生成后改变类路径?(我意识到这不太可能) 或者在构建之前有没有更好的方法来处理这个问题
编辑:我要说清楚,我现在唯一遇到问题的文件是
服务器
。我只是为了展示它们是如何联系在一起的,而没有必要去看它们
我遇到的问题是服务器。我将所有库与服务器ear捆绑在一起,但是当创建类路径时,库的相对位置是。/
。我需要这是。/../
。如果我在生成时将类路径转换为。/../
,那么它将找不到库,因为它在生成之后才位于该位置
我能不能让这个ant构建在jar生成后改变类路径?(我意识到这不太可能)
或者在构建之前有没有更好的方法来处理这个问题,这样我就可以得到正确的类路径
根据请求,这里是我关心的部分。特别是server.package
和server.app\u包
的目标。这些库被捆绑在ear中。因此,要获得它们,类路径必须是。/../
<project name="GPServer" default="dist" basedir=".">
<description>
</description>
<!-- set global properties for this build -->
<dirname property="server.basedir" file="${ant.file.GPServer}"/>
<property name="server.src" location="${server.basedir}/src"/>
<property name="server.build" location="${server.basedir}/build"/>
<property name="server.dist" location="${server.basedir}/dist"/>
<property name="server.lib" location="${server.basedir}/lib"/>
<property name="deploy.location" location="${server.basedir}/../../jboss-as-7.1.1.Final/standalone/deployments"/>
<property name="jboss.lib" location="${server.basedir}/../../jboss-as-7.1.1.Final/standalone/lib"/>
<path id="server.class.path">
<!-- <fileset dir="${server.basedir}/lib">
<include name="*.jar"/>
</fileset> -->
<fileset dir="${server.lib}">
<include name="*.jar"/>
</fileset>
<fileset dir="${server.basedir}">
<include name="*.properties"/>
</fileset>
</path>
<pathconvert property="server.modified.class.path" refid="server.class.path">
<globmapper from="../*" to="../../*" />
</pathconvert>
<path id="final.server.classpath">
<pathelement path="${server.modified.class.path}"/>
</path>
<target name="server.init">
<!-- Create the time stamp -->
<tstamp/>
<!-- Create the build directory structure used by compile -->
<mkdir dir="${server.build}"/>
<mkdir dir="${server.dist}"/>
</target>
<target name="server.compile" depends="server.init" description="compile the source " >
<!-- Compile the java code from ${src} into ${dist} -->
<javac srcdir="${server.src}" destdir="${server.dist}" >
<classpath>
<path refid="final.server.classpath"/>
</classpath>
</javac>
</target>
<target name="server.package" depends="server.compile" description="create the jar" >
<manifestclasspath property="manifest.path" jarfile="${server.dist}/GrahamsProjServer.jar">
<classpath refid="final.server.classpath"/>
</manifestclasspath>
<jar destfile="${server.dist}/GrahamsProjServer.jar" basedir="${server.dist}" excludes="*.jar">
<manifest>
<attribute name="Class-Path" value="${manifest.path}"/>
</manifest>
</jar>
</target>
<target name="server.app_package" depends="server.package" description="create the jar" >
<ear destfile="${server.dist}/GrahamsProjServer.ear" appxml="${server.basedir}/META-INF/application.xml" >
<metainf dir="${server.basedir}/META-INF"/>
<fileset dir="${server.dist}" includes="*.jar"/>
<fileset dir="${server.basedir}" includes="lib/*.jar" />
</ear>
</target>
<target name="server.deploy" depends="server.package" description="generate the distribution" >
<!-- Create the distribution directory -->
<ear destfile="${deploy.location}/GrahamsProjServer.ear" appxml="${server.basedir}/META-INF/application.xml" >
<metainf dir="${server.basedir}/META-INF"/>
<fileset dir="${server.dist}" includes="*.jar"/>
<fileset dir="${server.basedir}" includes="lib/*.jar" />
</ear>
</target>
<target name="server.clean"
description="clean up" >
<!-- Delete the ${build} and ${dist} directory trees -->
<delete dir="${server.build}"/>
<delete dir="${server.dist}"/>
<echo message="Deleting files in ${deploy.location}"/>
<delete>
<fileset dir="${deploy.location}" excludes="*.txt"/>
</delete>
</target>
</project>
您的问题是在
客户端+服务器
中导入下标
<!-- ============================================= -->
<!-- Import Server/Client Build Files -->
<!-- ============================================= -->
<import file="${basedir}/../GrahamsProjClient/build-client.xml"/>
<import file="${basedir}/../GrahamsProjServer/build-server.xml"/>
你不应该那样做。如果要在单独的构建文件中执行目标,请使用
我忘了提到我正在使用java webstart。我根本不需要在清单中包含库。它们只需要位于webstart的jnlp文件中。您正在调用哪些目标,以及调用顺序如何?请包含您关心的代码片段。几个月后,链接将变成404。问题发生在server
ant文件中。不是client+server
ant文件。对不起,我应该说得更清楚。事实上,我甚至没有理由包括client
和client+server
ant文件。