1. 问题
    2. 我如何指定不需要输入值的参数?
    3. 我如何引用运行时参数?
    4. 目标
    5. 了解如何向命令添加额外的选项。
    6. 了解如何引用运行时参数。

    有时,工具需要额外的命令行选项,这些选项与输入参数并不完全对应。
    在本例中,我们将包装Java编译器,以将Java源文件编译为类文件。默认情况下,“javac”将在与源文件相同的目录中创建类文件。然而,CWL输入文件(以及它们所在的目录)可能是只读的,因此我们需要指示“javac”将类文件写入指定的输出目录。
    arguments.cwl

    1. #!/usr/bin/env cwl-runner
    2. cwlVersion: v1.0
    3. class: CommandLineTool
    4. label: Example trivial wrapper for Java 9 compiler
    5. hints:
    6. DockerRequirement:
    7. dockerPull: openjdk:9.0.1-11-slim
    8. baseCommand: javac
    9. arguments: ["-d", $(runtime.outdir)]
    10. inputs:
    11. src:
    12. type: File
    13. inputBinding:
    14. position: 1
    15. outputs:
    16. classfile:
    17. type: File
    18. outputBinding:
    19. glob: "*.class"

    arguments-job.yml

    1. src:
    2. class: File
    3. path: Hello.java

    现在,创建一个示例Java文件,并在命令行上调用cwl-runner

    1. $ echo "public class Hello {}" > Hello.java
    2. $ cwl-runner arguments.cwl arguments-job.yml
    3. [job arguments.cwl] /tmp/tmpwYALo1$ docker \
    4. run \
    5. -i \
    6. --volume=/home/peter/work/common-workflow-language/v1.0/examples/Hello.java:/var/lib/cwl/stg8939ac04-7443-4990-a518-1855b2322141/Hello.java:ro \
    7. --volume=/tmp/tmpwYALo1:/var/spool/cwl:rw \
    8. --volume=/tmp/tmpptIAJ8:/tmp:rw \
    9. --workdir=/var/spool/cwl \
    10. --read-only=true \
    11. --user=1001 \
    12. --rm \
    13. --env=TMPDIR=/tmp \
    14. --env=HOME=/var/spool/cwl \
    15. java:7 \
    16. javac \
    17. -d \
    18. /var/spool/cwl \
    19. /var/lib/cwl/stg8939ac04-7443-4990-a518-1855b2322141/Hello.java
    20. Final process status is success
    21. {
    22. "classfile": {
    23. "size": 416,
    24. "location": "/home/example/Hello.class",
    25. "checksum": "sha1$2f7ac33c1f3aac3f1fec7b936b6562422c85b38a",
    26. "class": "File"
    27. }
    28. }

    这里,我们使用arguments字段向命令行添加一个附加参数,这个参数不绑定到特定的输入参数。

    1. arguments: ["-d", $(runtime.outdir)]

    这个例子引用了一个运行时参数。运行时参数提供了实际执行工具时有关硬件或软件环境的信息。$(runtime.outdir)参数是指定输出目录的路径。其他参数包括$(runtime.tmpdir), $(runtime.ram), $(runtime.cores), $(runtime.outdirSize)和$(runtime.tmpdirSize)。有关详细信息,请参阅CWL规范的运行时环境部分。