我已在HPC群集中安装了生物信息学工具Picard 2.20
,以便在我的基因组对齐文件上运行一些指标。 Picard 2.20需要JDK 1.8,我们的集群有1.6,所以我在集群的主目录中安装了JDK 1.8
,并为PATH
和LD_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.
如何处理?我错过了什么?它是类路径的东西吗?
答案 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"