0

I am executing target in build.xml

<target name="validateProd">
    <echo>[18] Validation Begins...</echo>
    <if>
        <and><equals arg1="${canDeploy}" arg2="true"/> </and>
        <then>
            <fail message="Test Class Not Specified" unless="env.testClass"/>
            <echo>[19] ${env.testClass}</echo>
            <script language="javascript"><![CDATA[
            var deployTask = project.createTask('antlib:com.salesforce:deploy');
            deployTask.setUsername(project.getProperty("sf.username"));
            deployTask.setPassword(project.getProperty("sf.password"));
            deployTask.setServerURL(project.getProperty("sf.serverurl"));
            deployTask.setDeployRoot(project.getProperty("sf.deployDir"));
            deployTask.setCheckonly(true);
            deployTask.setTestLevel('RunSpecifiedTests');
            deployTask.setMaxPoll(project.getProperty("sf.maxPoll"));
            var tests = project.getProperty("env.testClass");
            if (tests) {
                deployTask.setTestLevel('RunSpecifiedTests');
                tests = tests.split(',');
                for (var i = 0; i < tests.length; i++) {
                    var runTest = java.lang.Class.forName(
                    "com.salesforce.ant.DeployTask$CodeNameElement"
                    ).newInstance();
                    runTest.addText(tests[i]);
                    deployTask.addRunTest(runTest);
                }
                deployTask.perform();
            }
            ]]></script>
        </then>
        <else>
            <echo>[20] Nothing to deploy</echo>
        </else>
    </if>
</target>

I get following exception:

 BUILD FAILED


D:\a\r1\a\_sfdcauto\build.xml:376: java.lang.ClassNotFoundException: com.salesforce.ant.DeployTask$
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at jdk.nashorn.internal.runtime.ScriptLoader.findClass(ScriptLoader.java:83)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at jdk.nashorn.internal.runtime.ScriptLoader.loadClass(ScriptLoader.java:55)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at java.lang.invoke.MethodHandleImpl$BindCaller$T/1873091796.invoke_V(MethodHandleImpl.java:1258)
at jdk.nashorn.internal.scripts.Script$\^eval\_.:program(<eval>:13)
at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:637)
at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:494)
at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:393)
at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:449)
at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:406)
at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:402)
at jdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:155)
at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:264)
at org.apache.tools.ant.util.optional.JavaxScriptRunner.evaluateScript(JavaxScriptRunner.java:154)
at org.apache.tools.ant.util.optional.JavaxScriptRunner.executeScript(JavaxScriptRunner.java:86)
at org.apache.tools.ant.taskdefs.optional.Script.execute(Script.java:53)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99)
at org.apache.tools.ant.Task.perform(Task.java:350)
at java.util.Vector.forEach(Vector.java:1277)
at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:67)
at net.sf.antcontrib.logic.IfTask.execute(IfTask.java:197)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99)
at org.apache.tools.ant.TaskAdapter.execute(TaskAdapter.java:155)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99)
at org.apache.tools.ant.Task.perform(Task.java:350)
at org.apache.tools.ant.Target.execute(Target.java:449)
at org.apache.tools.ant.Target.performTasks(Target.java:470)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1401)
at org.apache.tools.ant.Project.executeTarget(Project.java:1374)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1264)
at org.apache.tools.ant.Main.runBuild(Main.java:827)
at org.apache.tools.ant.Main.startAnt(Main.java:223)
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:284)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:101)

I have already have following in build.xml:

<taskdef resource="com/salesforce/antlib.xml" uri="antlib:com.salesforce">
        <classpath>
            <pathelement location="lib/ant-salesforce.jar"/>
        </classpath>
    </taskdef>
  • I am able to solve this by installing locally-hosted jenkins on my personal machine and by adding ant-salesforce.jar to ANT_HOME/lib folder.
  • On Azure-devops, I also tried by copying file by shell/cmd task to ANT_HOME/lib in azure devops before executing ant task, but I am not able to solve this exception.
  • I also tried by lib in options e.g. ant deploy -Ddir=src -Dtests=Class1,Class2,Class3 -lib ant-salesforce.jar as mentioned in this question

Is there any way to add ant-salesforce.jar to lib of ANT_HOME/lib ? or correctly reference antlib:com.salesforce:deploy

SSJOY
  • 48
  • 1
  • 5

2 Answers2

1

Microsoft-hosted agents are maintained by Microsoft, if you want to have more control to install dependent software needed for your builds and deployments, you need to deploy self-hosted agents and use it in Azure pipeline. Please check it and kindly let me know the result.

wallezzi
  • 334
  • 1
  • 6
0

SSJOY has provided the solution that this issue can be resolved by adding vmImage: windows-latest in yml, so this pipeline will use image: Windows Server 2019 with Visual Studio 2019.

Posting here so others who have the same issue can find this it quickly. Thanks for SSJOY's sharing.

Edward Han-MSFT
  • 2,879
  • 1
  • 4
  • 9
  • Hi SSJOY, Does this answer work? If yes, you could Accept it as an Answer, it could help other community members who get the same issues and we could archive this thread, thanks. – Edward Han-MSFT May 18 '21 at 03:33