def get_jars(): '''Get the final list of JAR files passed to javabridge''' imagej_path = get_path_to_jars() if hasattr(sys, 'frozen'): jar_files = [ jar_filename for jar_filename in os.listdir(imagej_path) if jar_filename.lower().endswith(".jar") ] def sort_fn(a, b): aa, bb = [(0 if x.startswith("cellprofiler-java") else 1, x) for x in a, b] return cmp(aa, bb) jar_files = sorted(jar_files, cmp=sort_fn) else: jar_files = get_cellprofiler_jars() jar_files = [os.path.join(imagej_path, f) for f in jar_files] class_path = javabridge.JARS + jar_files if os.environ.has_key("CLASSPATH"): class_path += os.environ["CLASSPATH"].split(os.pathsep) logging.debug("Adding Java class path from environment variable, " "CLASSPATH" "") logging.debug(" CLASSPATH=" + os.environ["CLASSPATH"]) plugin_directory = cpprefs.get_ij_plugin_directory() if (plugin_directory is not None and os.path.isdir(plugin_directory)): logger.debug("Using %s as imagej plugin directory" % plugin_directory) # # Add the plugin directory to pick up .class files in a directory # hierarchy. # class_path.append(plugin_directory) logger.debug("Adding %s to class path" % plugin_directory) # # Add any .jar files in the directory # for jarfile in os.listdir(plugin_directory): jarpath = os.path.join(plugin_directory, jarfile) if jarfile.lower().endswith(".jar"): logger.debug("Adding %s to class path" % jarpath) class_path.append(jarpath) else: logger.debug("Skipping %s" % jarpath) else: logger.info("Plugin directory doesn't point to valid folder: " + plugin_directory) if sys.platform.startswith("win") and not hasattr(sys, 'frozen'): # Have to find tools.jar from javabridge.locate import find_jdk jdk_path = find_jdk() if jdk_path is not None: tools_jar = os.path.join(jdk_path, "lib", "tools.jar") class_path.append(tools_jar) else: logger.warning("Failed to find tools.jar") return class_path
def get_jars(): """ Get the final list of JAR files passed to javabridge """ class_path = [] if os.environ.has_key("CLASSPATH"): class_path += os.environ["CLASSPATH"].split(os.pathsep) logging.debug( "Adding Java class path from environment variable, ""CLASSPATH""") logging.debug(" CLASSPATH=" + os.environ["CLASSPATH"]) pathname = os.path.dirname(prokaryote.__file__) jar_files = [os.path.join(pathname, f) for f in os.listdir(pathname) if f.lower().endswith(".jar")] class_path += javabridge.JARS + jar_files if sys.platform.startswith("win") and not hasattr(sys, 'frozen'): # Have to find tools.jar from javabridge.locate import find_jdk jdk_path = find_jdk() if jdk_path is not None: tools_jar = os.path.join(jdk_path, "lib", "tools.jar") class_path.append(tools_jar) else: logger.warning("Failed to find tools.jar") return class_path
def get_jars(): """ Get the final list of JAR files passed to javabridge """ class_path = [] if os.environ.has_key("CLASSPATH"): class_path += os.environ["CLASSPATH"].split(os.pathsep) logging.debug("Adding Java class path from environment variable, " "CLASSPATH" "") logging.debug(" CLASSPATH=" + os.environ["CLASSPATH"]) pathname = os.path.dirname(prokaryote.__file__) jar_files = [ os.path.join(pathname, f) for f in os.listdir(pathname) if f.lower().endswith(".jar") ] class_path += javabridge.JARS + jar_files if sys.platform.startswith("win") and not hasattr(sys, 'frozen'): # Have to find tools.jar from javabridge.locate import find_jdk jdk_path = find_jdk() if jdk_path is not None: tools_jar = os.path.join(jdk_path, "lib", "tools.jar") class_path.append(tools_jar) else: logger.warning("Failed to find tools.jar") return class_path
def run_maven(pom_path, goal="package", quiet=False, run_tests=True, aggressive_update = True, return_stdout = False, additional_args = []): '''Run a Maven pom to install all of the needed jars pom_path - the directory hosting the Maven POM goal - the maven goal. "package" is the default which is pretty much "do whatever the POM was built to do" quiet - feed Maven the -q switch if true to make it run in quiet mode run_tests - if False, set the "skip tests" maven flag. This is appropriate if you're silently building a known-good downloaded source. aggressive_update - if True, use the -U switch to make Maven go to the internet and check for updates. If False, default behavior. If None, use the -o switch to prevent Maven from any online updates. return_stdout - redirect stdout to capture a string and return it if True, dump Maven output to console if False additional_args - additional arguments for the command-line Runs mvn package on the POM ''' from javabridge.locate import find_jdk maven_install_path = get_maven_install_path() jdk_home = find_jdk() env = os.environ.copy() if jdk_home is not None: env["JAVA_HOME"] = jdk_home executeable_path = get_mvn_executable_path(maven_install_path) args = [executeable_path] if aggressive_update: args.append("-U") elif aggressive_update is None: args.append("-o") if quiet: args.append("-q") if not run_tests: args.append("-Dmaven.test.skip=true") args += additional_args args.append(goal) logging.debug("Running %s" % (" ".join(args))) for key in list(env.keys()): value = env[key] if isinstance(key, unicode): key = key.encode("utf-8") if isinstance(value, unicode): value = value.encode("utf-8") env[key] = value if return_stdout: return check_output(args, cwd = pom_path, env=env) else: subprocess.check_call(args, cwd = pom_path, env=env)
def get_jars(): '''Get the final list of JAR files passed to javabridge''' imagej_path = get_path_to_jars() if hasattr(sys, 'frozen'): jar_files = [ jar_filename for jar_filename in os.listdir(imagej_path) if jar_filename.lower().endswith(".jar")] def sort_fn(a, b): aa,bb = [(0 if x.startswith("cellprofiler-java") else 1, x) for x in a, b] return cmp(aa, bb) jar_files = sorted(jar_files, cmp = sort_fn) else: jar_files = get_cellprofiler_jars() jar_files = [os.path.join(imagej_path, f) for f in jar_files] class_path = javabridge.JARS + jar_files if os.environ.has_key("CLASSPATH"): class_path += os.environ["CLASSPATH"].split(os.pathsep) logging.debug( "Adding Java class path from environment variable, ""CLASSPATH""") logging.debug(" CLASSPATH="+os.environ["CLASSPATH"]) plugin_directory = cpprefs.get_ij_plugin_directory() if (plugin_directory is not None and os.path.isdir(plugin_directory)): logger.debug("Using %s as imagej plugin directory" % plugin_directory) # # Add the plugin directory to pick up .class files in a directory # hierarchy. # class_path.append(plugin_directory) logger.debug("Adding %s to class path" % plugin_directory) # # Add any .jar files in the directory # for jarfile in os.listdir(plugin_directory): jarpath = os.path.join(plugin_directory, jarfile) if jarfile.lower().endswith(".jar"): logger.debug("Adding %s to class path" % jarpath) class_path.append(jarpath) else: logger.debug("Skipping %s" % jarpath) else: logger.info("Plugin directory doesn't point to valid folder: " + plugin_directory) if sys.platform.startswith("win") and not hasattr(sys, 'frozen'): # Have to find tools.jar from javabridge.locate import find_jdk jdk_path = find_jdk() if jdk_path is not None: tools_jar = os.path.join(jdk_path, "lib","tools.jar") class_path.append(tools_jar) else: logger.warning("Failed to find tools.jar") return class_path
data_files += [('artwork', [ 'artwork\\%s' % (x) for x in os.listdir('artwork') if x.endswith(".png") or x.endswith(".psd") or x.endswith(".txt") ]), ('imagej\\jars', ['imagej\\jars\\%s' % x for x in os.listdir('imagej\\jars')])] data_files += matplotlib.get_py2exe_datafiles() ################################ # # Collect the JVM # ################################ from javabridge.locate import find_jdk jdk_dir = find_jdk() temp_dir = tempfile.mkdtemp() rofiles = [] def add_jre_files(path): files = [] directories = [] local_path = os.path.join(jdk_dir, path) for filename in os.listdir(local_path): if filename.startswith("."): continue local_file = os.path.join(jdk_dir, path, filename) relative_path = os.path.join(path, filename) if not os.access(local_file, os.W_OK): # distutils can't deal so well with read-only files
data_files += [('cellprofiler\\icons', ['cellprofiler\\icons\\%s'%(x) for x in os.listdir('cellprofiler\\icons') if x.endswith(".png") or x.endswith(".psd") or x.endswith(".txt")]), ('imagej\\jars', ['imagej\\jars\\%s' % x for x in os.listdir('imagej\\jars')])] data_files += matplotlib.get_py2exe_datafiles() ################################ # # Collect the JVM # ################################ from javabridge.locate import find_jdk jdk_dir = find_jdk() temp_dir = tempfile.mkdtemp() rofiles = [] def add_jre_files(path): files = [] directories = [] local_path = os.path.join(jdk_dir, path) for filename in os.listdir(local_path): if filename.startswith("."): continue local_file = os.path.join(jdk_dir, path, filename) relative_path = os.path.join(path, filename) if not os.access(local_file, os.W_OK): # distutils can't deal so well with read-only files old_local_file = local_file temp_path = os.path.join(temp_dir, path)
def cp_start_vm(): '''Start CellProfiler's JVM via Javabridge JVM parameters are harvested from preferences and the environment variables: CP_JDWP_PORT - port # for debugging Java within the JVM cpprefs.get_awt_headless() - controls java.awt.headless to prevent awt from being invoked ''' args = ["-Dloci.bioformats.loaded=true", "-Dlogback.configurationFile=logback.xml", "-Djava.util.prefs.PreferencesFactory="+ "org.cellprofiler.headlesspreferences.HeadlessPreferencesFactory"] imagej_path = get_path_to_jars() if hasattr(sys, 'frozen'): jar_files = [ jar_filename for jar_filename in os.listdir(imagej_path) if jar_filename.lower().endswith(".jar")] def sort_fn(a, b): aa,bb = [(0 if x.startswith("cellprofiler-java") else 1, x) for x in a, b] return cmp(aa, bb) jar_files = sorted(jar_files, cmp = sort_fn) else: jar_files = get_cellprofiler_jars() jar_files = [os.path.join(imagej_path, f) for f in jar_files] class_path = javabridge.JARS + jar_files if os.environ.has_key("CLASSPATH"): class_path += os.environ["CLASSPATH"].split(os.pathsep) logging.debug( "Adding Java class path from environment variable, ""CLASSPATH""") logging.debug(" CLASSPATH="+os.environ["CLASSPATH"]) plugin_directory = cpprefs.get_ij_plugin_directory() if (plugin_directory is not None and os.path.isdir(plugin_directory)): logger.debug("Using %s as imagej plugin directory" % plugin_directory) # # Add the plugin directory to pick up .class files in a directory # hierarchy. # class_path.append(plugin_directory) logger.debug("Adding %s to class path" % plugin_directory) # # Add any .jar files in the directory # for jarfile in os.listdir(plugin_directory): jarpath = os.path.join(plugin_directory, jarfile) if jarfile.lower().endswith(".jar"): logger.debug("Adding %s to class path" % jarpath) class_path.append(jarpath) else: logger.debug("Skipping %s" % jarpath) else: logger.info("Plugin directory doesn't point to valid folder: " + plugin_directory) if sys.platform.startswith("win") and not hasattr(sys, 'frozen'): # Have to find tools.jar from javabridge.locate import find_jdk jdk_path = find_jdk() if jdk_path is not None: tools_jar = os.path.join(jdk_path, "lib","tools.jar") class_path.append(tools_jar) else: logger.warning("Failed to find tools.jar") args += get_patcher_args(class_path) awt_headless = cpprefs.get_awt_headless() if awt_headless: logger.debug("JVM will be started with AWT in headless mode") args.append("-Djava.awt.headless=true") heap_size = str(cpprefs.get_jvm_heap_mb())+"m" if os.environ.has_key("CP_JDWP_PORT"): args.append( ("-agentlib:jdwp=transport=dt_socket,address=127.0.0.1:%s" ",server=y,suspend=n") % os.environ["CP_JDWP_PORT"]) javabridge.start_vm(args=args, class_path=class_path, max_heap_size = heap_size) # # Enable Bio-Formats directory cacheing # try: c_location = javabridge.JClassWrapper("loci.common.Location") c_location.cacheDirectoryListings(True) logger.debug("Enabled Bio-formats directory cacheing") except: logger.warning("Bioformats version does not support directory cacheing") # # Monkey-patch bioformats.formatreader.get_class_list to add # the classes we added to loci.formats.in # import bioformats.formatreader old_get_class_list = bioformats.formatreader.get_class_list def get_class_list(): "Return a wrapped instance of loci.formats.ClassList" env = javabridge.get_env() class_list = old_get_class_list() rais_classname = 'loci/common/RandomAccessInputStream' # # Move any class to the back that thinks it can read garbage # fd, path = tempfile.mkstemp(suffix=".garbage") stream = None try: os.write(fd, "This is not an image file") os.fsync(fd) stream = javabridge.make_instance( rais_classname, '(Ljava/lang/String;)V', path) problem_classes = [] for klass in env.get_object_array_elements(class_list.get_classes()): try: instance = javabridge.call( klass, "newInstance", "()Ljava/lang/Object;") can_read_garbage = javabridge.call( instance, "isThisType", "(L%s;)Z" % rais_classname, stream) if can_read_garbage: problem_classes.append(klass) class_list.remove_class(klass) except: logger.info("Caught exception in %s.isThisType", javabridge.to_string(klass)) finally: os.close(fd) javabridge.call(stream, "close", "()V") os.remove(path) for classname in ("loci.formats.in.FlowSightReader", "loci.formats.in.IM3Reader"): klass = javabridge.class_for_name(classname) class_list.add_class(klass) for klass in problem_classes: class_list.add_class(klass) return class_list bioformats.formatreader.get_class_list = get_class_list
def cp_start_vm(): '''Start CellProfiler's JVM via Javabridge JVM parameters are harvested from preferences and the environment variables: CP_JDWP_PORT - port # for debugging Java within the JVM cpprefs.get_awt_headless() - controls java.awt.headless to prevent awt from being invoked ''' args = [ "-Dloci.bioformats.loaded=true", "-Dlogback.configurationFile=logback.xml", "-Djava.util.prefs.PreferencesFactory=" + "org.cellprofiler.headlesspreferences.HeadlessPreferencesFactory" ] imagej_path = get_path_to_jars() if hasattr(sys, 'frozen'): jar_files = [ jar_filename for jar_filename in os.listdir(imagej_path) if jar_filename.lower().endswith(".jar") ] def sort_fn(a, b): aa, bb = [(0 if x.startswith("cellprofiler-java") else 1, x) for x in a, b] return cmp(aa, bb) jar_files = sorted(jar_files, cmp=sort_fn) else: jar_files = get_cellprofiler_jars() jar_files = [os.path.join(imagej_path, f) for f in jar_files] class_path = javabridge.JARS + jar_files if os.environ.has_key("CLASSPATH"): class_path += os.environ["CLASSPATH"].split(os.pathsep) logging.debug("Adding Java class path from environment variable, " "CLASSPATH" "") logging.debug(" CLASSPATH=" + os.environ["CLASSPATH"]) plugin_directory = cpprefs.get_ij_plugin_directory() if (plugin_directory is not None and os.path.isdir(plugin_directory)): logger.debug("Using %s as imagej plugin directory" % plugin_directory) # # Add the plugin directory to pick up .class files in a directory # hierarchy. # class_path.append(plugin_directory) logger.debug("Adding %s to class path" % plugin_directory) # # Add any .jar files in the directory # for jarfile in os.listdir(plugin_directory): jarpath = os.path.join(plugin_directory, jarfile) if jarfile.lower().endswith(".jar"): logger.debug("Adding %s to class path" % jarpath) class_path.append(jarpath) else: logger.debug("Skipping %s" % jarpath) else: logger.info("Plugin directory doesn't point to valid folder: " + plugin_directory) if sys.platform.startswith("win") and not hasattr(sys, 'frozen'): # Have to find tools.jar from javabridge.locate import find_jdk jdk_path = find_jdk() if jdk_path is not None: tools_jar = os.path.join(jdk_path, "lib", "tools.jar") class_path.append(tools_jar) else: logger.warning("Failed to find tools.jar") args += get_patcher_args(class_path) awt_headless = cpprefs.get_awt_headless() if awt_headless: logger.debug("JVM will be started with AWT in headless mode") args.append("-Djava.awt.headless=true") heap_size = str(cpprefs.get_jvm_heap_mb()) + "m" if os.environ.has_key("CP_JDWP_PORT"): args.append(("-agentlib:jdwp=transport=dt_socket,address=127.0.0.1:%s" ",server=y,suspend=n") % os.environ["CP_JDWP_PORT"]) javabridge.start_vm(args=args, class_path=class_path, max_heap_size=heap_size) # # Enable Bio-Formats directory cacheing # try: c_location = javabridge.JClassWrapper("loci.common.Location") c_location.cacheDirectoryListings(True) logger.debug("Enabled Bio-formats directory cacheing") except: logger.warning( "Bioformats version does not support directory cacheing")
def cp_start_vm(): '''Start CellProfiler's JVM via Javabridge JVM parameters are harvested from preferences and the environment variables: CP_JDWP_PORT - port # for debugging Java within the JVM cpprefs.get_awt_headless() - controls java.awt.headless to prevent awt from being invoked ''' args = ["-Dloci.bioformats.loaded=true", "-Dlogback.configurationFile=logback.xml", "-Djava.util.prefs.PreferencesFactory="+ "org.cellprofiler.headlesspreferences.HeadlessPreferencesFactory"] imagej_path = get_path_to_jars() if hasattr(sys, 'frozen'): jar_files = [ jar_filename for jar_filename in os.listdir(imagej_path) if jar_filename.lower().endswith(".jar")] def sort_fn(a, b): aa,bb = [(0 if x.startswith("cellprofiler-java") else 1, x) for x in a, b] return cmp(aa, bb) jar_files = sorted(jar_files, cmp = sort_fn) else: jar_files = get_cellprofiler_jars() jar_files = [os.path.join(imagej_path, f) for f in jar_files] class_path = javabridge.JARS + jar_files if os.environ.has_key("CLASSPATH"): class_path += os.environ["CLASSPATH"].split(os.pathsep) logging.debug( "Adding Java class path from environment variable, ""CLASSPATH""") logging.debug(" CLASSPATH="+os.environ["CLASSPATH"]) plugin_directory = cpprefs.get_ij_plugin_directory() if (plugin_directory is not None and os.path.isdir(plugin_directory)): logger.debug("Using %s as imagej plugin directory" % plugin_directory) # # Add the plugin directory to pick up .class files in a directory # hierarchy. # class_path.append(plugin_directory) logger.debug("Adding %s to class path" % plugin_directory) # # Add any .jar files in the directory # for jarfile in os.listdir(plugin_directory): jarpath = os.path.join(plugin_directory, jarfile) if jarfile.lower().endswith(".jar"): logger.debug("Adding %s to class path" % jarpath) class_path.append(jarpath) else: logger.debug("Skipping %s" % jarpath) else: logger.info("Plugin directory doesn't point to valid folder: " + plugin_directory) if sys.platform.startswith("win") and not hasattr(sys, 'frozen'): # Have to find tools.jar from javabridge.locate import find_jdk jdk_path = find_jdk() if jdk_path is not None: tools_jar = os.path.join(jdk_path, "lib","tools.jar") class_path.append(tools_jar) else: logger.warning("Failed to find tools.jar") args += get_patcher_args(class_path) awt_headless = cpprefs.get_awt_headless() if awt_headless: logger.debug("JVM will be started with AWT in headless mode") args.append("-Djava.awt.headless=true") heap_size = str(cpprefs.get_jvm_heap_mb())+"m" if os.environ.has_key("CP_JDWP_PORT"): args.append( ("-agentlib:jdwp=transport=dt_socket,address=127.0.0.1:%s" ",server=y,suspend=n") % os.environ["CP_JDWP_PORT"]) javabridge.start_vm(args=args, class_path=class_path, max_heap_size = heap_size) # # Enable Bio-Formats directory cacheing # try: c_location = javabridge.JClassWrapper("loci.common.Location") c_location.cacheDirectoryListings(True) logger.debug("Enabled Bio-formats directory cacheing") except: logger.warning("Bioformats version does not support directory cacheing")