Repository URL to install this package:
|
Version:
1.26.0.dev0+gite506aa5f ▾
|
# Copyright 2015 Pants project contributors (see CONTRIBUTORS.md).
# Licensed under the Apache License, Version 2.0 (see LICENSE).
import logging
from pants.subsystem.subsystem import Subsystem
from pants.util.strutil import safe_shlex_split
logger = logging.getLogger(__name__)
class JVM(Subsystem):
"""A JVM invocation.
:API: public
"""
options_scope = "jvm"
# Broken out here instead of being inlined in the registration stanza,
# because various tests may need to access these.
options_default = [
"-Xmx256m",
# Always bump MaxFDLimit - this means that Java will listen to the environmental FD limit,
# rather than imposing its own. This should just be what the JVM does by default. Boo.
"-XX:-MaxFDLimit",
]
@classmethod
def register_options(cls, register):
super().register_options(register)
# TODO(benjy): Options to specify the JVM version?
register(
"--options",
type=list,
metavar="<option>...",
default=cls.options_default,
help="Run with these extra JVM options.",
)
register(
"--program-args",
type=list,
metavar="<arg>...",
help="Run with these extra program args.",
)
register("--debug", type=bool, help="Run the JVM with remote debugging.")
register(
"--debug-port",
advanced=True,
type=int,
default=5005,
help="The JVM will listen for a debugger on this port.",
)
register(
"--debug-args",
advanced=True,
type=list,
default=[
"-Xdebug",
"-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address={debug_port}",
],
help="The JVM remote-debugging arguments. {debug_port} will be replaced with "
"the value of the --debug-port option.",
)
register(
"--synthetic-classpath",
advanced=True,
type=bool,
default=True,
help="Use synthetic jar to work around classpath length restrictions.",
)
def get_jvm_options(self):
"""Return the options to run this JVM with.
These are options to the JVM itself, such as -Dfoo=bar, -Xmx=1g, -XX:-UseParallelGC and so on.
Thus named because get_options() already exists (and returns this object's Pants options).
"""
ret = []
for opt in self.get_options().options:
ret.extend(safe_shlex_split(opt))
if (
self.get_options().debug
or self.get_options().is_flagged("debug_port")
or self.get_options().is_flagged("debug_args")
):
debug_port = self.get_options().debug_port
ret.extend(arg.format(debug_port=debug_port) for arg in self.get_options().debug_args)
return ret
def get_program_args(self):
"""Get the program args to run this JVM with.
These are the arguments passed to main() and are program-specific.
"""
ret = []
for arg in self.get_options().program_args:
ret.extend(safe_shlex_split(arg))
return ret