diff --git a/ivy.xml b/ivy.xml index f90b9a010..96c1de844 100644 --- a/ivy.xml +++ b/ivy.xml @@ -46,7 +46,7 @@ - + @@ -75,6 +75,9 @@ + + + diff --git a/public/java/src/org/broadinstitute/sting/utils/classloader/PluginManager.java b/public/java/src/org/broadinstitute/sting/utils/classloader/PluginManager.java index 04cbef0c3..f24bbb636 100644 --- a/public/java/src/org/broadinstitute/sting/utils/classloader/PluginManager.java +++ b/public/java/src/org/broadinstitute/sting/utils/classloader/PluginManager.java @@ -35,8 +35,10 @@ import org.reflections.scanners.SubTypesScanner; import org.reflections.util.ConfigurationBuilder; import org.slf4j.LoggerFactory; +import java.io.File; import java.lang.reflect.Constructor; import java.lang.reflect.Method; +import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; import java.util.*; @@ -57,8 +59,25 @@ public class PluginManager { Logger logger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Reflections.class); logger.setLevel(Level.OFF); + Set classPathUrls = new LinkedHashSet(); + + URL cwd; + try { + cwd = new File(".").getAbsoluteFile().toURI().toURL(); + } catch (MalformedURLException e) { + throw new RuntimeException(e); + } + + // NOTE: Reflections also scans directories for classes. + // Meanwhile some of the jar MANIFEST.MF Bundle-ClassPath properties contain "." + // Do NOT let reflections scan the CWD where it often picks up test classes when + // they weren't explicitly in the classpath, for example the UninstantiableWalker + for (URL url: JVMUtils.getClasspathURLs()) + if (!url.equals(cwd)) + classPathUrls.add(url); + defaultReflections = new Reflections( new ConfigurationBuilder() - .setUrls(JVMUtils.getClasspathURLs()) + .setUrls(classPathUrls) .setScanners(new SubTypesScanner())); } diff --git a/public/packages/Queue.xml b/public/packages/Queue.xml index 589cb45f5..c256e5687 100644 --- a/public/packages/Queue.xml +++ b/public/packages/Queue.xml @@ -59,7 +59,12 @@ - + + + + + + diff --git a/public/scala/src/org/broadinstitute/sting/queue/extensions/snpeff/SnpEff.scala b/public/scala/src/org/broadinstitute/sting/queue/extensions/snpeff/SnpEff.scala new file mode 100644 index 000000000..62f66ec06 --- /dev/null +++ b/public/scala/src/org/broadinstitute/sting/queue/extensions/snpeff/SnpEff.scala @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2011, The Broad Institute + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +package org.broadinstitute.sting.queue.extensions.snpeff + +import org.broadinstitute.sting.queue.function.JavaCommandLineFunction +import java.io.File +import org.broadinstitute.sting.commandline.{Argument, Output, Input} + +/** + * Basic snpEff support. + * See: http://www.broadinstitute.org/gsa/wiki/index.php/Adding_Genomic_Annotations_Using_SnpEff_and_VariantAnnotator + */ +class SnpEff extends JavaCommandLineFunction { + javaMainClass = "ca.mcgill.mcb.pcingola.snpEffect.commandLine.SnpEff" + + @Input(doc="snp vcf4 file") + var inVcf: File = _ + + @Input(doc="config file with path to data dir", required=false) + var config: File = _ + + @Argument(doc="genome version") + var genomeVersion: String = _ + + @Argument(doc="verbose", required=false) + var verbose = true + + @Output(doc="snp eff output") + var outVcf: File = _ + + override def commandLine = Array( + super.commandLine, + " eff", + if (verbose) " -v" else "", + optional(" -c ", config), + " -i vcf -o vcf %s %s > %s".format(genomeVersion, inVcf, outVcf) + ).mkString +} diff --git a/settings/repository/net.sf.snpeff/snpeff-2.0.2.jar b/settings/repository/net.sf.snpeff/snpeff-2.0.2.jar new file mode 100755 index 000000000..bfd06f97f Binary files /dev/null and b/settings/repository/net.sf.snpeff/snpeff-2.0.2.jar differ diff --git a/settings/repository/net.sf.snpeff/snpeff-2.0.2.xml b/settings/repository/net.sf.snpeff/snpeff-2.0.2.xml new file mode 100644 index 000000000..f0568def4 --- /dev/null +++ b/settings/repository/net.sf.snpeff/snpeff-2.0.2.xml @@ -0,0 +1,3 @@ + + +