You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by da...@apache.org on 2018/11/04 18:01:02 UTC
lucene-solr:jira/gradle: Add forbiddenApi check
Repository: lucene-solr
Updated Branches:
refs/heads/jira/gradle 44d676eac -> 58e7b7a9d
Add forbiddenApi check
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/58e7b7a9
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/58e7b7a9
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/58e7b7a9
Branch: refs/heads/jira/gradle
Commit: 58e7b7a9d0e2f409dee60b2b9bb688eceface987
Parents: 44d676e
Author: Cao Manh Dat <da...@apache.org>
Authored: Sun Nov 4 18:00:54 2018 +0000
Committer: Cao Manh Dat <da...@apache.org>
Committed: Sun Nov 4 18:00:54 2018 +0000
----------------------------------------------------------------------
build.gradle | 24 ++++----
buildSrc/build.gradle | 2 +
.../org/apache/lucene/gradle/BuildPlugin.groovy | 40 +++++++++++++
buildSrc/src/main/resources/forbidden/base.txt | 60 ++++++++++++++++++++
.../src/main/resources/forbidden/lucene.txt | 53 +++++++++++++++++
.../main/resources/forbidden/servlet-api.txt | 43 ++++++++++++++
buildSrc/src/main/resources/forbidden/solr.txt | 57 +++++++++++++++++++
buildSrc/src/main/resources/forbidden/solrj.txt | 40 +++++++++++++
buildSrc/src/main/resources/forbidden/tests.txt | 29 ++++++++++
lucene/core/build.gradle | 1 -
10 files changed, 335 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/58e7b7a9/build.gradle
----------------------------------------------------------------------
diff --git a/build.gradle b/build.gradle
index 6c46251..3a0a1a1 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,11 +1,6 @@
import org.apache.lucene.gradle.CheckWorkingCopy
+import org.apache.lucene.gradle.BuildPlugin
-/*
- * This file was generated by the Gradle 'init' task.
- *
- * This is a general purpose Gradle build.
- * Learn how to create Gradle builds at https://guides.gradle.org/creating-new-gradle-builds/
- */
allprojects {
repositories {
mavenCentral()
@@ -27,14 +22,17 @@ allprojects {
}
subprojects {
- plugins.withType(JavaPlugin) {
- test {
- systemProperty 'java.security.egd', 'file:/dev/./urandom'
+ pj ->
+ plugins.withType(JavaPlugin) {
+ test {
+ systemProperty 'java.security.egd', 'file:/dev/./urandom'
+ }
+
+ pj.plugins.apply(BuildPlugin)
+ }
+ tasks.withType(Test) {
+ maxParallelForks = Runtime.runtime.availableProcessors() / 2
}
- }
- tasks.withType(Test) {
- maxParallelForks = Runtime.runtime.availableProcessors() / 2
- }
}
tasks.create('checkWorkingCopy', CheckWorkingCopy, true)
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/58e7b7a9/buildSrc/build.gradle
----------------------------------------------------------------------
diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle
index 20921a9..fa4ef3c 100644
--- a/buildSrc/build.gradle
+++ b/buildSrc/build.gradle
@@ -11,4 +11,6 @@ dependencies {
compile localGroovy()
compile 'org.eclipse.jgit:org.eclipse.jgit:4.6.0.201612231935-r'
+ compile 'de.thetaphi:forbiddenapis:2.5'
+ compile 'org.apache.rat:apache-rat:0.11'
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/58e7b7a9/buildSrc/src/main/groovy/org/apache/lucene/gradle/BuildPlugin.groovy
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/groovy/org/apache/lucene/gradle/BuildPlugin.groovy b/buildSrc/src/main/groovy/org/apache/lucene/gradle/BuildPlugin.groovy
new file mode 100644
index 0000000..570466c
--- /dev/null
+++ b/buildSrc/src/main/groovy/org/apache/lucene/gradle/BuildPlugin.groovy
@@ -0,0 +1,40 @@
+package org.apache.lucene.gradle
+
+import de.thetaphi.forbiddenapis.gradle.CheckForbiddenApis
+import de.thetaphi.forbiddenapis.gradle.ForbiddenApisPlugin
+import org.gradle.api.Plugin
+import org.gradle.api.Project
+
+class BuildPlugin implements Plugin<Project> {
+
+ @Override
+ void apply(Project project) {
+ project.pluginManager.apply(ForbiddenApisPlugin.class)
+ project.forbiddenApis {
+ failOnUnsupportedJava = false
+ bundledSignatures = ['jdk-unsafe', 'jdk-deprecated', 'jdk-non-portable', 'jdk-reflection']
+ signaturesURLs = [getClass().getResource('/forbidden/base.txt')]
+ suppressAnnotations = ['**.SuppressForbidden']
+ }
+
+ project.tasks.withType(CheckForbiddenApis) {
+ if (name.endsWith('Test')) {
+ signaturesURLs = project.forbiddenApis.signaturesURLs +
+ [getClass().getResource('/forbidden/tests.txt')]
+ }
+ if (project.group.equals("org.apache.lucene")) {
+ signaturesURLs = project.forbiddenApis.signaturesURLs +
+ [getClass().getResource('/forbidden/lucene.txt')]
+ }
+ if (project.group.equals("org.apache.solr") ) {
+ if (project.name.equals("solrj")) {
+ signaturesURLs = project.forbiddenApis.signaturesURLs +
+ [getClass().getResource('/forbidden/solrj.txt')]
+ } else {
+ signaturesURLs = project.forbiddenApis.signaturesURLs +
+ [getClass().getResource('/forbidden/solr.txt'), getClass().getResource('/forbidden/servlet-api.txt')]
+ }
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/58e7b7a9/buildSrc/src/main/resources/forbidden/base.txt
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/resources/forbidden/base.txt b/buildSrc/src/main/resources/forbidden/base.txt
new file mode 100644
index 0000000..0a81d03
--- /dev/null
+++ b/buildSrc/src/main/resources/forbidden/base.txt
@@ -0,0 +1,60 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+@defaultMessage Spawns threads with vague names; use a custom thread factory (Lucene's NamedThreadFactory, Solr's DefaultSolrThreadFactory) and name threads so that you can tell (by its name) which executor it is associated with
+java.util.concurrent.Executors#newFixedThreadPool(int)
+java.util.concurrent.Executors#newSingleThreadExecutor()
+java.util.concurrent.Executors#newCachedThreadPool()
+java.util.concurrent.Executors#newSingleThreadScheduledExecutor()
+java.util.concurrent.Executors#newScheduledThreadPool(int)
+java.util.concurrent.Executors#defaultThreadFactory()
+java.util.concurrent.Executors#privilegedThreadFactory()
+
+@defaultMessage Properties files should be read/written with Reader/Writer, using UTF-8 charset. This allows reading older files with unicode escapes, too.
+java.util.Properties#load(java.io.InputStream)
+java.util.Properties#save(java.io.OutputStream,java.lang.String)
+java.util.Properties#store(java.io.OutputStream,java.lang.String)
+
+@defaultMessage The context classloader should never be used for resource lookups, unless there is a 3rd party library that needs it. Always pass a classloader down as method parameters.
+java.lang.Thread#getContextClassLoader()
+java.lang.Thread#setContextClassLoader(java.lang.ClassLoader)
+
+java.lang.Character#codePointBefore(char[],int) @ Implicit start offset is error-prone when the char[] is a buffer and the first chars are random chars
+java.lang.Character#codePointAt(char[],int) @ Implicit end offset is error-prone when the char[] is a buffer and the last chars are random chars
+
+java.io.File#delete() @ use Files.delete for real exception, IOUtils.deleteFilesIgnoringExceptions if you dont care
+
+java.util.Collections#shuffle(java.util.List) @ Use shuffle(List, Random) instead so that it can be reproduced
+
+java.util.Locale#forLanguageTag(java.lang.String) @ use new Locale.Builder().setLanguageTag(...).build() which has error handling
+java.util.Locale#toString() @ use Locale#toLanguageTag() for a standardized BCP47 locale name
+
+@defaultMessage Constructors for wrapper classes of Java primitives should be avoided in favor of the public static methods available or autoboxing
+java.lang.Integer#<init>(int)
+java.lang.Integer#<init>(java.lang.String)
+java.lang.Byte#<init>(byte)
+java.lang.Byte#<init>(java.lang.String)
+java.lang.Short#<init>(short)
+java.lang.Short#<init>(java.lang.String)
+java.lang.Long#<init>(long)
+java.lang.Long#<init>(java.lang.String)
+java.lang.Boolean#<init>(boolean)
+java.lang.Boolean#<init>(java.lang.String)
+java.lang.Character#<init>(char)
+java.lang.Float#<init>(float)
+java.lang.Float#<init>(double)
+java.lang.Float#<init>(java.lang.String)
+java.lang.Double#<init>(double)
+java.lang.Double#<init>(java.lang.String)
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/58e7b7a9/buildSrc/src/main/resources/forbidden/lucene.txt
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/resources/forbidden/lucene.txt b/buildSrc/src/main/resources/forbidden/lucene.txt
new file mode 100644
index 0000000..2a1d883
--- /dev/null
+++ b/buildSrc/src/main/resources/forbidden/lucene.txt
@@ -0,0 +1,53 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+@defaultMessage Use NIO.2 instead
+java.io.File
+java.io.FileInputStream
+java.io.FileOutputStream
+java.io.PrintStream#<init>(java.lang.String,java.lang.String)
+java.io.PrintWriter#<init>(java.lang.String,java.lang.String)
+java.util.Formatter#<init>(java.lang.String,java.lang.String,java.util.Locale)
+java.io.RandomAccessFile
+java.nio.file.Path#toFile()
+java.util.jar.JarFile
+java.util.zip.ZipFile
+@defaultMessage Use home-grown methods instead
+java.lang.Math#toRadians(double)
+java.lang.Math#toDegrees(double)
+
+@defaultMessage Prefer using ArrayUtil as Arrays#copyOfRange fills zeros for bad bounds
+java.util.Arrays#copyOfRange(byte[],int,int)
+java.util.Arrays#copyOfRange(char[],int,int)
+java.util.Arrays#copyOfRange(short[],int,int)
+java.util.Arrays#copyOfRange(int[],int,int)
+java.util.Arrays#copyOfRange(long[],int,int)
+java.util.Arrays#copyOfRange(float[],int,int)
+java.util.Arrays#copyOfRange(double[],int,int)
+java.util.Arrays#copyOfRange(boolean[],int,int)
+java.util.Arrays#copyOfRange(java.lang.Object[],int,int)
+java.util.Arrays#copyOfRange(java.lang.Object[],int,int,java.lang.Class)
+
+@defaultMessage Prefer using ArrayUtil as Arrays#copyOf fills zeros for bad bounds
+java.util.Arrays#copyOf(byte[],int)
+java.util.Arrays#copyOf(char[],int)
+java.util.Arrays#copyOf(short[],int)
+java.util.Arrays#copyOf(int[],int)
+java.util.Arrays#copyOf(long[],int)
+java.util.Arrays#copyOf(float[],int)
+java.util.Arrays#copyOf(double[],int)
+java.util.Arrays#copyOf(boolean[],int)
+java.util.Arrays#copyOf(java.lang.Object[],int)
+java.util.Arrays#copyOf(java.lang.Object[],int,java.lang.Class)
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/58e7b7a9/buildSrc/src/main/resources/forbidden/servlet-api.txt
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/resources/forbidden/servlet-api.txt b/buildSrc/src/main/resources/forbidden/servlet-api.txt
new file mode 100644
index 0000000..dc82e8f
--- /dev/null
+++ b/buildSrc/src/main/resources/forbidden/servlet-api.txt
@@ -0,0 +1,43 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+@defaultMessage Servlet API method is parsing request parameters without using the correct encoding if no extra configuration is given in the servlet container
+
+javax.servlet.ServletRequest#getParameter(java.lang.String)
+javax.servlet.ServletRequest#getParameterMap()
+javax.servlet.ServletRequest#getParameterNames()
+javax.servlet.ServletRequest#getParameterValues(java.lang.String)
+
+javax.servlet.http.HttpServletRequest#getSession() @ Servlet API getter has side effect of creating sessions
+
+@defaultMessage Servlet API method is broken and slow in some environments (e.g., Jetty's UTF-8 readers)
+
+javax.servlet.ServletRequest#getReader()
+javax.servlet.ServletResponse#getWriter()
+javax.servlet.ServletInputStream#readLine(byte[],int,int)
+javax.servlet.ServletOutputStream#print(boolean)
+javax.servlet.ServletOutputStream#print(char)
+javax.servlet.ServletOutputStream#print(double)
+javax.servlet.ServletOutputStream#print(float)
+javax.servlet.ServletOutputStream#print(int)
+javax.servlet.ServletOutputStream#print(long)
+javax.servlet.ServletOutputStream#print(java.lang.String)
+javax.servlet.ServletOutputStream#println(boolean)
+javax.servlet.ServletOutputStream#println(char)
+javax.servlet.ServletOutputStream#println(double)
+javax.servlet.ServletOutputStream#println(float)
+javax.servlet.ServletOutputStream#println(int)
+javax.servlet.ServletOutputStream#println(long)
+javax.servlet.ServletOutputStream#println(java.lang.String)
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/58e7b7a9/buildSrc/src/main/resources/forbidden/solr.txt
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/resources/forbidden/solr.txt b/buildSrc/src/main/resources/forbidden/solr.txt
new file mode 100644
index 0000000..303f0a8
--- /dev/null
+++ b/buildSrc/src/main/resources/forbidden/solr.txt
@@ -0,0 +1,57 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+@defaultMessage Spawns threads without MDC logging context; use ExecutorUtil.newMDCAwareFixedThreadPool instead
+java.util.concurrent.Executors#newFixedThreadPool(int,java.util.concurrent.ThreadFactory)
+
+@defaultMessage Spawns threads without MDC logging context; use ExecutorUtil.newMDCAwareSingleThreadExecutor instead
+java.util.concurrent.Executors#newSingleThreadExecutor(java.util.concurrent.ThreadFactory)
+
+@defaultMessage Spawns threads without MDC logging context; use ExecutorUtil.newMDCAwareCachedThreadPool instead
+java.util.concurrent.Executors#newCachedThreadPool(java.util.concurrent.ThreadFactory)
+
+@defaultMessage Use ExecutorUtil.MDCAwareThreadPoolExecutor instead of ThreadPoolExecutor
+java.util.concurrent.ThreadPoolExecutor#<init>(int,int,long,java.util.concurrent.TimeUnit,java.util.concurrent.BlockingQueue,java.util.concurrent.ThreadFactory,java.util.concurrent.RejectedExecutionHandler)
+java.util.concurrent.ThreadPoolExecutor#<init>(int,int,long,java.util.concurrent.TimeUnit,java.util.concurrent.BlockingQueue)
+java.util.concurrent.ThreadPoolExecutor#<init>(int,int,long,java.util.concurrent.TimeUnit,java.util.concurrent.BlockingQueue,java.util.concurrent.ThreadFactory)
+java.util.concurrent.ThreadPoolExecutor#<init>(int,int,long,java.util.concurrent.TimeUnit,java.util.concurrent.BlockingQueue,java.util.concurrent.RejectedExecutionHandler)
+
+@defaultMessage Use slf4j classes instead
+org.apache.log4j.**
+org.apache.logging.log4j.**
+java.util.logging.**
+
+@defaultMessage Use RTimer/TimeOut/System.nanoTime for time comparisons, and `new Date()` output/debugging/stats of timestamps. If for some miscellaneous reason, you absolutely need to use this, use a SuppressForbidden.
+java.lang.System#currentTimeMillis()
+
+@defaultMessage Use corresponding Java 8 functional/streaming interfaces
+com.google.common.base.Function
+com.google.common.base.Joiner
+com.google.common.base.Predicate
+com.google.common.base.Supplier
+
+@defaultMessage Use java.nio.charset.StandardCharsets instead
+com.google.common.base.Charsets
+org.apache.commons.codec.Charsets
+
+@defaultMessage Use methods in java.util.Objects instead
+com.google.common.base.Objects#equal(java.lang.Object,java.lang.Object)
+com.google.common.base.Objects#hashCode(java.lang.Object[])
+com.google.common.base.Preconditions#checkNotNull(java.lang.Object)
+com.google.common.base.Preconditions#checkNotNull(java.lang.Object,java.lang.Object)
+
+@defaultMessage Use methods in java.util.Comparator instead
+com.google.common.collect.Ordering
+
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/58e7b7a9/buildSrc/src/main/resources/forbidden/solrj.txt
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/resources/forbidden/solrj.txt b/buildSrc/src/main/resources/forbidden/solrj.txt
new file mode 100644
index 0000000..f8ce502
--- /dev/null
+++ b/buildSrc/src/main/resources/forbidden/solrj.txt
@@ -0,0 +1,40 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+@defaultMessage Spawns threads without MDC logging context; use ExecutorUtil.newMDCAwareFixedThreadPool instead
+java.util.concurrent.Executors#newFixedThreadPool(int,java.util.concurrent.ThreadFactory)
+
+@defaultMessage Spawns threads without MDC logging context; use ExecutorUtil.newMDCAwareSingleThreadExecutor instead
+java.util.concurrent.Executors#newSingleThreadExecutor(java.util.concurrent.ThreadFactory)
+
+@defaultMessage Spawns threads without MDC logging context; use ExecutorUtil.newMDCAwareCachedThreadPool instead
+java.util.concurrent.Executors#newCachedThreadPool(java.util.concurrent.ThreadFactory)
+
+@defaultMessage Use ExecutorUtil.MDCAwareThreadPoolExecutor instead of ThreadPoolExecutor
+java.util.concurrent.ThreadPoolExecutor#<init>(int,int,long,java.util.concurrent.TimeUnit,java.util.concurrent.BlockingQueue,java.util.concurrent.ThreadFactory,java.util.concurrent.RejectedExecutionHandler)
+java.util.concurrent.ThreadPoolExecutor#<init>(int,int,long,java.util.concurrent.TimeUnit,java.util.concurrent.BlockingQueue)
+java.util.concurrent.ThreadPoolExecutor#<init>(int,int,long,java.util.concurrent.TimeUnit,java.util.concurrent.BlockingQueue,java.util.concurrent.ThreadFactory)
+java.util.concurrent.ThreadPoolExecutor#<init>(int,int,long,java.util.concurrent.TimeUnit,java.util.concurrent.BlockingQueue,java.util.concurrent.RejectedExecutionHandler)
+
+@defaultMessage Use slf4j classes instead
+org.apache.log4j.**
+org.apache.logging.log4j.**
+java.util.logging.**
+
+@defaultMessage Use RTimer/TimeOut/System.nanoTime for time comparisons, and `new Date()` output/debugging/stats of timestamps. If for some miscellaneous reason, you absolutely need to use this, use a SuppressForbidden.
+java.lang.System#currentTimeMillis()
+
+@defaultMessage Use java.nio.charset.StandardCharsets instead
+org.apache.commons.codec.Charsets
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/58e7b7a9/buildSrc/src/main/resources/forbidden/tests.txt
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/resources/forbidden/tests.txt b/buildSrc/src/main/resources/forbidden/tests.txt
new file mode 100644
index 0000000..fbcc0dd
--- /dev/null
+++ b/buildSrc/src/main/resources/forbidden/tests.txt
@@ -0,0 +1,29 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+junit.framework.TestCase @ All classes should derive from LuceneTestCase
+
+java.util.Random#<init>() @ Use RandomizedRunner's random() instead
+java.lang.Math#random() @ Use RandomizedRunner's random().nextDouble() instead
+
+# TODO: fix tests that do this!
+#java.lang.System#currentTimeMillis() @ Don't depend on wall clock times
+#java.lang.System#nanoTime() @ Don't depend on wall clock times
+
+com.carrotsearch.randomizedtesting.annotations.Seed @ Don't commit hardcoded seeds
+
+@defaultMessage Use LuceneTestCase.collate instead, which can avoid JDK-8071862
+java.text.Collator#compare(java.lang.Object,java.lang.Object)
+java.text.Collator#compare(java.lang.String,java.lang.String)
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/58e7b7a9/lucene/core/build.gradle
----------------------------------------------------------------------
diff --git a/lucene/core/build.gradle b/lucene/core/build.gradle
index 434b5c0..da6f5aa 100644
--- a/lucene/core/build.gradle
+++ b/lucene/core/build.gradle
@@ -1,6 +1,5 @@
apply plugin: 'java'
-group = 'org.apache.lucene'
archivesBaseName = 'core'
dependencies {