blob: 792f4a840f2b98baa8b0c44e55534824f8ec760f [file] [log] [blame]
# This is a quick hack to make it so that all Java rules build using Java 7.
# TODO(mbolin): Find a less hacky way to do this, likely something in .buckconfig.
original_java_library = java_library
def java_library(
name,
srcs=[],
resources=[],
export_deps=False,
source='7',
target='7',
proguard_config=None,
deps=[],
visibility=[],
):
original_java_library(
name=name,
srcs=srcs,
resources=resources,
export_deps=export_deps,
source=source,
target=target,
proguard_config=proguard_config,
deps=deps,
visibility=visibility,
)
original_java_test = java_test
def java_test(
name,
srcs=[],
labels=[],
resources=[],
source='7',
target='7',
vm_args=[],
source_under_test=[],
contacts=[],
deps=[],
visibility=[],
):
original_java_test(
name=name,
srcs=srcs,
labels=labels,
resources=resources,
source=source,
target=target,
vm_args=[
# Add -XX:-UseSplitVerifier by default to work around:
# http://arihantwin.blogspot.com/2012/08/getting-error-illegal-local-variable.html
'-XX:-UseSplitVerifier',
# Add -Dsun.zip.disableMemoryMapping=true to work around a JDK issue
# related to modifying JAR/ZIP files that have been loaded into memory:
#
# http://bugs.sun.com/view_bug.do?bug_id=7129299
#
# This has been observed to cause a problem in integration tests such as
# CachedTestIntegrationTest where `buck build //:test` is run repeatedly
# such that a corresponding `test.jar` file is overwritten several times.
# The CompiledClassFileFinder in JavaTestRule creates a java.util.zip.ZipFile
# to enumerate the zip entries in order to find the set of .class files
# in `test.jar`. This interleaving of reads and writes appears to match
# the conditions to trigger the issue reported on bugs.sun.com.
#
# Currently, we do not set this flag in bin/buck_common, as Buck does not
# normally modify the contents of buck-out after they are loaded into
# memory. However, we may need to use this flag when running buckd where
# references to zip files may be long-lived.
#
# Finally, note that when you specify this flag,
# `System.getProperty("sun.zip.disableMemoryMapping")` will return `null`
# even though you have specified the flag correctly. Apparently sun.misc.VM
# (http://www.docjar.com/html/api/sun/misc/VM.java.html) saves the property
# internally, but removes it from the set of system properties that are
# publicly accessible.
'-Dsun.zip.disableMemoryMapping=true',
] + vm_args,
source_under_test=source_under_test,
contacts=contacts,
deps=deps,
visibility=visibility,
)