diff --git a/pre-upload.py b/pre-upload.py
index 9628730..a2ab332 100755
--- a/pre-upload.py
+++ b/pre-upload.py
@@ -495,6 +495,12 @@
       r'.*\.go$',
   ]
 
+  DEFAULT_MAX_LENGTHS = [
+      # Java's line length limit is 100 chars.
+      # https://chromium.googlesource.com/chromium/src/+/master/styleguide/java/java.md
+      (r'.*\.java$', 100),
+  ]
+
   MAX_LEN = 80
 
   included, excluded = _parse_common_inclusion_options(options)
@@ -509,6 +515,13 @@
         r'^#\s*(define|include|import|pragma|if|ifndef|endif)\b',
     )
 
+    max_len = MAX_LEN
+
+    for expr, length in DEFAULT_MAX_LENGTHS:
+      if re.search(expr, afile):
+        max_len = length
+        break
+
     if os.path.basename(afile).startswith('OWNERS'):
       # File paths can get long, and there's no way to break them up into
       # multiple lines.
@@ -520,15 +533,16 @@
     skip_regexps = [re.compile(x) for x in skip_regexps]
     for line_num, line in _get_file_diff(afile, commit):
       # Allow certain lines to exceed the maxlen rule.
-      if len(line) <= MAX_LEN or any(x.search(line) for x in skip_regexps):
+      if len(line) <= max_len or any(x.search(line) for x in skip_regexps):
         continue
 
-      errors.append('%s, line %s, %s chars' % (afile, line_num, len(line)))
+      errors.append('%s, line %s, %s chars, over %s chars' %
+                    (afile, line_num, len(line), max_len))
       if len(errors) == 5:  # Just show the first 5 errors.
         break
 
   if errors:
-    msg = 'Found lines longer than %s characters (first 5 shown):' % MAX_LEN
+    msg = 'Found lines longer than the limit (first 5 shown):'
     return HookFailure(msg, errors)
   return None
 
diff --git a/pre-upload_unittest.py b/pre-upload_unittest.py
index e1cbcb5..ac21185 100755
--- a/pre-upload_unittest.py
+++ b/pre-upload_unittest.py
@@ -109,9 +109,10 @@
     ]
     failure = pre_upload._check_no_long_lines(ProjectNamed('PROJECT'), 'COMMIT')
     self.assertTrue(failure)
-    self.assertEqual('Found lines longer than 80 characters (first 5 shown):',
+    self.assertEqual('Found lines longer than the limit (first 5 shown):',
                      failure.msg)
-    self.assertEqual(['x.py, line %d, 81 chars' % x for x in [3, 4, 8]],
+    self.assertEqual(['x.py, line %d, 81 chars, over 80 chars' %
+                      x for x in [3, 4, 8]],
                      failure.items)
 
   def testCheckTreatsOwnersFilesSpecially(self):
@@ -143,7 +144,7 @@
           self.assertFalse(failure, assert_msg)
         else:
           self.assertTrue(failure, assert_msg)
-          self.assertIn('Found lines longer than 80 characters', failure.msg,
+          self.assertIn('Found lines longer than the limit', failure.msg,
                         assert_msg)
 
   def testIncludeOptions(self):
@@ -166,6 +167,25 @@
     self.assertFalse(pre_upload._check_no_long_lines(
         ProjectNamed('PROJECT'), 'COMMIT', options=['--exclude_regex=foo']))
 
+  def testSpecialLineLength(self):
+    mock_lines = (
+        (u'x' * 101, True),
+        (u'x' * 100, False),
+        (u'x' * 81, False),
+        (u'x' * 80, False),
+    )
+    self.PatchObject(pre_upload,
+                     '_get_affected_files',
+                     return_value=['foo.java'])
+    for line, is_ok in mock_lines:
+      self.diff_mock.return_value = [(1, line)]
+      if is_ok:
+        self.assertTrue(pre_upload._check_no_long_lines(
+            ProjectNamed('PROJECT'), 'COMMIT'))
+      else:
+        self.assertFalse(pre_upload._check_no_long_lines(
+            ProjectNamed('PROJECT'), 'COMMIT'))
+
 
 class CheckTabbedIndentsTest(PreUploadTestCase):
   """Tests for _check_tabbed_indents."""
