生成一个动态选择.jar文件的类路径



我有一个项目,我们存储一些客户端API jar的本地副本。这些jar文件可能与客户机使用的最终运行时版本相同,也可能不同。当我在本地构建项目进行测试时,我希望使用jar的本地副本。但是,当我与客户端在现场时,我想查看项目中的外部位置,并检查客户端更新的jar是否可用。如果是,我们就使用它们,如果不是,我们就返回到本地副本。

我已经找到了一种有条件地构建包含给定jar的文件集的方法,但是我不知道如何将文件集放入我的类路径中。

下面是我到目前为止生成的脚本。我没有访问anti -contrib IF语句的权限,所以这是我找到的有条件地构建文件集的唯一方法。

<condition property="externalFileExists">
     <available file="[path to external file]"/>
</condition>
<target name="buildExternalFileset" if="externalFileExists">
     <fileset id="fileset" includes="[path to external library]"/>
</target>
<target name="buildInternalFileset" unless="externalFileExists">
     <fileset id="fileset" includes="[path to internal library]"/>
</target>
<target name="buildFileset depends="buildExternalFileset, buildInternalFileSet>
</target>

一旦我构建了这个文件集,我如何将它包含在类路径中?

<path id="classpath">
     <!-- other filesets -->
     <!-- line that includes the conditional fileset by ID -->
</path>

根据类路径结构的文档,您可以在另一个路径中包含路径,但我没有看到包含外部文件集的示例。也许我已经回答了我的问题——我应该构建路径而不是文件集吗?此外,文件集文档实际上不包括添加id的选项,它们有用吗?

如果有人有更好的方法来做到这一点,我将非常高兴听到它!

我建议使用依赖项管理器,而不是尝试构建自己的依赖项管理器。

Apache ivy能够从配置的位置下载依赖。它还缓存下载的文件,如果它们在Maven Central中普遍可用,则无需将它们存储在本地。

<标题> 例子

这个项目有一个ivy设置文件,它从本地"lib"目录或Maven中心提取依赖项。

├── build.xml
├── ivysettings.xml
├── ivy.xml
└── lib
    ├── hamcrest-core-1.3.jar
    ├── junit-4.11.jar
    ├── log4j-1.2.17.jar
    ├── slf4j-api-1.7.5.jar
    └── slf4j-log4j12-1.7.5.jar

build . xml

<project name="demo" default="resolve" xmlns:ivy="antlib:org.apache.ivy.ant">
  <property name="build.dir" location="target"/>
  <available classname="org.apache.ivy.Main" property="ivy.installed"/>
  <target name="install-ivy" unless="ivy.installed">
    <mkdir dir="${user.home}/.ant/lib"/>
    <get dest="${user.home}/.ant/lib/ivy.jar" src="http://search.maven.org/remotecontent?filepath=org/apache/ivy/ivy/2.4.0/ivy-2.4.0.jar"/>
    <fail message="Ivy installed  run build again"/>
  </target>
  <target name="resolve" depends="install-ivy" description="Use ivy to resolve classpaths">
    <ivy:resolve/>
    <ivy:report todir='${build.dir}/ivy-reports' graph='false' xml='false'/>
    <ivy:cachepath pathid="compile.path" conf="compile"/>
    <ivy:cachepath pathid="test.path"    conf="test"/>
  </target>

  <target name="clean">
    <delete dir="${build.dir}"/>
  </target>
  <target name="clean-all" depends="clean">
    <ivy:cleancache/>
  </target>
</project>

指出:

  • Ivy没有捆绑在ANT中。"install-ivy"任务确保它在第一次运行
  • 时被安装。
  • "cachepath"任务将创建用于javac, junit和java任务的类路径。
  • "report"one_answers"cleancache"任务是有用的附加任务。

<ivy-module version="2.0">
    <info organisation="com.myspotontheweb" module="demo"/>
    <configurations>
        <conf name="compile" description="Required to compile application"/>
        <conf name="runtime" description="Additional run-time dependencies" extends="compile"/>
        <conf name="test"    description="Required for test only" extends="runtime"/>
    </configurations>
    <dependencies>
        <!-- compile dependencies -->
        <dependency org="org.slf4j" name="slf4j-api" rev="1.7.5" conf="compile->default"/>
        <!-- runtime dependencies -->
        <dependency org="org.slf4j" name="slf4j-log4j12" rev="1.7.5" conf="runtime->default"/>
        <!-- test dependencies -->
        <dependency org="junit" name="junit" rev="4.11" conf="test->default"/>
    </dependencies>
</ivy-module>

指出:

  • 使用配置来保持依赖分离。注意"cachepath"任务是如何使用它来控制依赖类路径的

ivysettings.xml

<ivysettings>
  <settings defaultResolver="my-resolvers"/>
  <resolvers>
    <chain name="my-resolvers" returnFirst="true">
      <filesystem name="local-lib">
        <artifact pattern="${ivy.settings.dir}/lib/[artifact]-[revision].[ext]"/> 
      </filesystem>
      <ibiblio name="central" m2compatible="true"/>
    </chain>
  </resolvers>
</ivysettings>

指出:

  • 这个文件是可选的。默认情况下,Ivy将从Maven Central
  • 检索
  • 特殊的链解析器控制使用哪个依赖源。在这种情况下,本地"lib"目录比Maven Cental更受青睐。

我不是很熟悉ant,但是如何在ant上构建配置呢?

试试这个网站的教程:http://ant.apache.org/easyant/history/trunk/howto/BuildConfigurations.html

试试这样

<classpath>
      <fileset dir="[external-path1]">
        <include name="**/*.jar"/>
      </fileset>
      <fileset dir="[external-path2]">
        <include name="**/*.jar"/>
      </fileset>
      <fileset dir="[external-path3]">
        <include name="**/*.jar"/>
      </fileset>
    </classpath>

在这里找到

https://ant.apache.org/manual/using.html路径

相关内容

  • 没有找到相关文章