如何在shell脚本中运行Picard(生物信息学)工具时摆脱Java异常错误?

时间:2016-04-07 13:31:44

标签: java bash shell java-8

我已在HPC群集中安装了生物信息学工具Picard 2.20,以便在我的基因组对齐文件上运行一些指标。 Picard 2.20需要JDK 1.8,我们的集群有1.6,所以我在集群的主目录中安装了JDK 1.8,并为PATHLD_LIBRARY设置了环境变量,以便它正常工作。我检查了jdk_1.8和Picard是否正确安装,因为它们在调用必要的命令时显示自定义-help页面。事实上,当我在输入文件的目录中运行它时,它们正在正常运行,但是如果我想通过shell脚本和qsub运行它会导致java错误。

这有效

java -Xmx2g -jar /home/vdas/tools/picard-tools-2.2.0/picard.jar AddOrReplaceReadGroups I=Aligned.out.sam O=rg_added_sorted.bam SO=coordinate RGID=S_13_O1_122_S12919 RGLB=PairedEnd RGPL=Illumina RGPU=C7MC6ACXX RGSM=S_13_O1_122_S12919

但这不是

#!/bin/sh
#
#$ -N picard_run
#$ -cwd
#$ -e err_picard_run.log
#$ -o out_picard_run.log
#$ -S /bin/sh
#$ -M abc.def@xyz.com
#$ -m bea
#$ -l h_vmem=40G

samfile=/data/GT/OvaCa_project/RNA-Seq/STAR_run/2pass
#cd $samfile

java -Xmx2g -jar /home/vdas/tools/picard-tools-2.2.0/picard.jar AddOrReplaceReadGroups I=$samfile/Aligned.out.sam O=$samfile/rg_added_sorted.bam SO=coordinate RGID=S_13_O1_122_S12919 RGLB=PairedEnd RGPL=Illumina RGPU=C7MC6ACXX RGSM=S_13_O1_122_S12919 

echo "done"

错误

Exception in thread "main" java.lang.UnsupportedClassVersionError: picard/cmdline/PicardCommandLine : Unsupported major.minor version 52.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:643)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
Could not find the main class: picard.cmdline.PicardCommandLine. Program will exit.
Exception in thread "main" java.lang.UnsupportedClassVersionError: picard/cmdline/PicardCommandLine : Unsupported major.minor version 52.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:643)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
Could not find the main class: picard.cmdline.PicardCommandLine. Program will exit.

如何处理?我错过了什么?它是类路径的东西吗?

2 个答案:

答案 0 :(得分:1)

关键是在您的$JAVA_HOME/bin或您的SGE qsub shell脚本中$PATH之前设置.bashrc,如下所示:

export JAVA_HOME=/home/vdas/tools/jdk1.8.0_77
export PATH=$JAVA_HOME/bin:$PATH

这将首先执行正确的版本jdk1.8.0_77

答案 1 :(得分:0)

检查您正在使用的java的版本和安装,并将JAVA_HOME变量设置为您的java 8安装。

我建议你以这种方式将java程序启动到脚本中:

#!/bin/sh
#
#$ -N picard_run
#$ -cwd
#$ -e err_picard_run.log
#$ -o out_picard_run.log
#$ -S /bin/sh
#$ -M abc.def@xyz.com
#$ -m bea
#$ -l h_vmem=40G

samfile=/data/GT/OvaCa_project/RNA-Seq/STAR_run/2pass
#cd $samfile

c=$(java -Xmx2g -jar /home/vdas/tools/picard-tools-2.2.0/picard.jar AddOrReplaceReadGroups I=$samfile/Aligned.out.sam O=$samfile/rg_added_sorted.bam SO=coordinate RGID=S_13_O1_122_S12919 RGLB=PairedEnd RGPL=Illumina RGPU=C7MC6ACXX RGSM=S_13_O1_122_S12919)

echo "done"