当前位置: 首页 > 知识库问答 >
问题:

在多个版本的类路径之间进行选择的蚂蚁脚本

缪志新
2023-03-14

我不熟悉蚂蚁脚本。

以下是需求描述

在我的工作区中,有各种各样的项目,我必须在RAD和eclipse IDE以及Websphere、tomcat和jboss环境中进行项目工作。。我已经做了特定于项目的设置,以使项目在RAD、websphere、eclipse和tomcat n jboss上工作。。

但是在一些文件中有一些变化,比如classpath n和一些配置文件。

这就给我留下了三个版本的工作空间。

但我的想法是为一个工作区提供多个版本的类路径,例如classpath_eclipse、classpath_rad等。。并且有一个ant脚本,它将根据哪个ide在构建过程中选择正确的文件。

所以伙计们,请建议一些方法,我如何实现这种方法。

共有2个答案

戎高爽
2023-03-14

我想分享一下我最终实现的方法。

类路径设置和一些依赖于运行时的项目配置XML。

在每个项目中,我们都创建了一个运行时\u classpah

ant中创建了一个target,它将运行时作为参数,对每个项目进行测试

以及一个目标,其内容为configxml_runtime

洪建茗
2023-03-14

我建议使用ApacheIvy来管理复杂的类路径。它将构建依赖项具体化为单独的常春藤。xml文件。

其次,ivy可以自动下载这些依赖项,从而减少源代码控制下的项目规模。

最后,这个解决方案乍看起来可能非常复杂。它的优点是它与其他构建技术(如Maven)兼容。

Ivy使用“配置”来管理JAR的逻辑分组。

在本例中,代码针对SLF4J api JAR进行编译,但在运行时使用不同的日志实现:

<ivy-module version="2.0">
    <info organisation="com.myspotontheweb" module="demo"/>

    <configurations>
        <conf name="compile" description="Required to compile application"/>
        <conf name="runtime.simple"  description="Runtime environment with minimal logging" extends="compile"/>
        <conf name="runtime.complex" description="Runtime environment with logback enabled" extends="compile"/>
        <conf name="test"    description="Required for test only" extends="runtime.simple"/>
        <conf name="build"   description="ANT tasks used by build"/>
    </configurations>

    <dependencies>
        <!-- compile dependencies -->
        <dependency org="org.slf4j" name="slf4j-api" rev="1.6.4" conf="compile->default"/>

        <!-- simple runtime dependencies -->
        <dependency org="org.slf4j" name="slf4j-simple" rev="1.6.4" conf="runtime.simple->default"/>

        <!-- complex runtime dependencies -->
        <dependency org="ch.qos.logback" name="logback-classic" rev="1.0.3" conf="runtime.complex->default"/>

        <!-- test dependencies -->
        <dependency org="junit" name="junit" rev="4.10" conf="test->default"/>

        <!-- Build dependencies -->
        <dependency org="org.codehaus.groovy" name="groovy-all" rev="1.8.6" conf="build->default"/>
    </dependencies>

</ivy-module>

笔记:

  • extends属性允许创建jar联合集

ivy ANT任务作为antlib导入。ivy cachepath任务用于将ivy管理的配置转换为正常的ANT路径,ivy report任务生成依赖关系报告。

<project name="demo" default="build" xmlns:ivy="antlib:org.apache.ivy.ant">

    <target name="init">
        <ivy:resolve/>

        <ivy:report todir='${ivy.reports.dir}' graph='false' xml='false'/>

        <ivy:cachepath pathid="compile.path" conf="compile"/>
        <ivy:cachepath pathid="runtime.simple.path" conf="runtime.simple"/>
        <ivy:cachepath pathid="runtime.complex.path" conf="runtime.complex"/>
        <ivy:cachepath pathid="test.path"    conf="test"/>
        <ivy:cachepath pathid="build.path"   conf="build"/>
    </target>
    ..
    ..

ivy检索任务用于在应用程序的打包阶段填充目录:

<target name="war">
    <ivy:retrieve pattern="${build.dir}/libs/[artifact].[ext]" conf="runtime.complex"/>

    <war destfile="myapp.war" webxml="src/metadata/myapp.xml">
        <fileset dir="${src.dir}/html/myapp"/>
        <fileset dir="${src.dir}/jsp/myapp"/>
        <lib dir="${build.dir}/libs"/>
        <classes dir="${build.dir}/classes"/>
    </war>
</target>

Ivy的Eclipse插件可用。

  • http://ant.apache.org/ivy/ivyde/

还可以使用嵌入式groovy任务生成IDE配置文件。下面是一个Eclipse示例:

<target name="eclipse">
    <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpathref="build.path"/>

    <ivy:cachefileset setid="libfiles" conf="compile"/>

    <groovy>
    <arg value="${src.dir}"/>
    <arg value="${build.dir}/classes"/>

    import groovy.xml.MarkupBuilder

    //
    // Generate the project file
    //
    project.log("Creating .project")

    new File(".project").withWriter { writer ->
        def xml = new MarkupBuilder(writer)

        xml.projectDescription() {
            name(project.name)
            comment()
            projects()
            buildSpec() {
                buildCommand() {
                    name("org.eclipse.jdt.core.javabuilder")
                    arguments()
                }
            }
            natures() {
                nature("org.eclipse.jdt.core.javanature")
            }
        }
    }

    //
    // Generate the classpath file
    //
    // The "lib" classpathentry fields are populated using the ivy artifact report
    //
    project.log("Creating .classpath")

    new File(".classpath").withWriter { writer ->
        def xml = new MarkupBuilder(writer)

        xml.classpath() {
            classpathentry(kind:"src",    path:args[0])
            classpathentry(kind:"output", path:args[1])
            classpathentry(kind:"con",    path:"org.eclipse.jdt.launching.JRE_CONTAINER")

            project.references.libfiles.each {
                classpathentry(kind:"lib", path:it)
            }
        }
    }
    </groovy>        
</target>
 类似资料:
  • 我有一个ANT脚本,它使用自定义类路径调用Java11类 ${basedir}/lib/ant目录包含几个JAR A.jar-我的图书馆 这些jars都可以很好地加载到类路径${ant.classpath}中。 工作流程是这样的:A.jar调用B.jar,B.jar调用C.jar。 所以,A.jar调用B.jar中的类没问题。它使用JAVA中的import语句调用类: 这工作完美。 然而,B.ja

  • 我对Ant非常陌生(我来自Maven),我发现了很多问题来做下面的操作。 我有一个名为CrystalIceGUI主项目,它使用了另一个名为ShellextBridge的依赖项项目。 依赖项目ShellExtBridge有一个自己的build.xml文件,该文件编译项目并将其打包到一个jar文件中,该jar文件被插入名为Release的direcotry中 主项目CrystalIceGUI有它的bu

  • 在visual studio中编译项目时,我会自动运行一个模糊处理程序。迷惑的。dll文件以相同的文件名保存,但保存在子文件夹中。 文件夹结构 问题:我能确保Inno Setup编译<code>FileA吗。dll,而不是,如果“安全”是否存在?

  • 问题内容: 我有一个带命令的Apache Ant构建文件,该命令要求在构建中有四个特定的JAR 。我试图做到这一点: …但其中没有显示任何文件。如何在我的类路径中包含这些文件? 问题答案: 这是我当前正在从事的项目的示例。我怀疑您可以对其进行修改以适合您的情况。

  • 我这样配置了我的应用程序: 我有两个身份验证提供程序(provider1和provider2),我希望将它们用于不同的endpoint: 现在发生的情况是,如果我调用

  • 当我尝试运行spark-shell时,我会得到以下错误: