You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rg...@apache.org on 2021/05/04 06:37:38 UTC

[logging-log4j2] 01/01: More JPMS work

This is an automated email from the ASF dual-hosted git repository.

rgoers pushed a commit to branch jpms-mockito-fails
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit 347edbb882c76c8549875b3c354cbd09f50b5eea
Author: Ralph Goers <rg...@apache.org>
AuthorDate: Mon May 3 23:37:07 2021 -0700

    More JPMS work
---
 .../org/apache/log4j/CallerInformationTest.java    |   2 +-
 .../test/java/org/apache/log4j/CategoryTest.java   |   2 +-
 .../test/java/org/apache/log4j/LogWithMDCTest.java |   2 +-
 .../java/org/apache/log4j/LogWithRouteTest.java    |   2 +-
 .../src/test/java/org/apache/log4j/LoggerTest.java |   2 +-
 log4j-api/pom.xml                                  | 103 ++++---
 .../src/main/{java9 => java}/module-info.java      |   1 +
 .../logging/log4j/util/SortedArrayStringMap.java   |   8 +
 .../src/test/java-test/module-info.java            |  21 +-
 log4j-api/src/test/java/module-info.java           |  17 ++
 {log4j-core => log4j-core-gctests}/pom.xml         | 246 ++--------------
 .../test/gc}/GcFreeAsynchronousLoggingTest.java    |   5 +-
 .../log4j/core/test/gc}/GcFreeLoggingTestUtil.java |  12 +-
 .../test/gc}/GcFreeMixedSyncAyncLoggingTest.java   |   5 +-
 .../test/gc}/GcFreeSynchronousLoggingTest.java     |   5 +-
 .../SecureSocketAppenderSocketOptionsTest.java     |   2 +-
 .../appender/SocketAppenderBufferSizeTest.java     |   2 +-
 .../appender/SocketAppenderSocketOptionsTest.java  |   2 +-
 .../log4j/core/appender/SocketAppenderTest.java    |   2 +-
 log4j-core/README.md                               |  37 +++
 log4j-core/pom.xml                                 | 269 +++++++++++++----
 .../log4j/core/impl/ExtendedStackTraceElement.java |   5 +
 .../logging/log4j/core/plugins}/package-info.java  |   6 +-
 log4j-core/src/main/java9/module-info.java         |  86 ++++++
 log4j-core/src/main/resources/META-INF/MANIFEST.MF |   0
 .../log4j/core}/test/AvailablePortFinder.java      |   2 +-
 .../test/AvailablePortSystemPropertyTestRule.java  |   2 +-
 .../logging/log4j/core}/test/ExtendedLevels.java   |   2 +-
 .../apache/logging/log4j/core}/test/GetLogger.java |   2 +-
 .../logging/log4j/core}/test/RuleChainFactory.java |   2 +-
 .../logging/log4j/core/test}/TestMarkers.java      |   5 +-
 .../core}/test/appender/AlwaysFailAppender.java    |   2 +-
 .../core}/test/appender/BlockingAppender.java      |   2 +-
 .../core}/test/appender/EncodingListAppender.java  |   6 +-
 .../core}/test/appender/FailOnceAppender.java      |   2 +-
 .../core}/test/appender/InMemoryAppender.java      |   2 +-
 .../log4j/core}/test/appender/ListAppender.java    |   4 +-
 .../log4j/core/test}/hamcrest/Descriptors.java     |   2 +-
 .../log4j/core/test}/hamcrest/FileMatchers.java    |   2 +-
 .../log4j/core/test}/hamcrest/MapMatchers.java     |   2 +-
 .../log4j/core/test}/junit/AppenderResolver.java   |   4 +-
 .../core/test}/junit/ConfigurationResolver.java    |   5 +-
 .../logging/log4j/core/test}/junit/JndiRule.java   |   2 +-
 .../core/test}/junit/LoggerContextResolver.java    |   3 +-
 .../log4j/core/test}/junit/LoggerContextRule.java  |   4 +-
 .../core/test}/junit/LoggerContextSource.java      |   2 +-
 .../logging/log4j/core/test}/junit/Named.java      |   2 +-
 .../core/test}/junit/ReconfigurationPolicy.java    |   2 +-
 .../test/junit/TypeBasedParameterResolver.java     |  80 ++++++
 .../log4j/core/test}/junit/package-info.java       |   2 +-
 log4j-core/src/test/java-test9/module-info.java    |  20 ++
 .../apache/logging/log4j/categories/Appenders.java |  33 ---
 .../logging/log4j/categories/Configurations.java   |  25 --
 .../apache/logging/log4j/categories/Layouts.java   |  28 --
 .../logging/log4j/categories/package-info.java     |  22 --
 .../log4j/core/AppenderRefLevelJsonTest.java       |   6 +-
 .../logging/log4j/core/AppenderRefLevelTest.java   |   6 +-
 .../logging/log4j/core/CollectionLoggingTest.java  |   6 +-
 .../log4j/core/CustomLevelsOverrideTest.java       |   6 +-
 .../logging/log4j/core/CustomLevelsTest.java       |   6 +-
 .../log4j/core/CustomLevelsWithFiltersTest.java    |   4 +-
 .../apache/logging/log4j/core/DeadlockTest.java    |   2 +-
 .../logging/log4j/core/ExtendedLevelTest.java      |   8 +-
 .../{ => core}/FormatterLoggerManualExample.java   |   5 +-
 .../apache/logging/log4j/core/HostNameTest.java    |   6 +-
 .../org/apache/logging/log4j/core/LevelTest.java   |   6 +-
 .../logging/log4j/core/LogEventFactoryTest.java    |   4 +-
 .../logging/log4j/{ => core}/LogRolloverTest.java  |   5 +-
 .../log4j/{ => core}/LogbackSubstitution.java      |  11 +-
 .../apache/logging/log4j/core/LoggerDateTest.java  |   4 +-
 .../org/apache/logging/log4j/core/LoggerTest.java  |  10 +-
 .../logging/log4j/core/LoggerUpdateTest.java       |   6 +-
 .../org/apache/logging/log4j/core/LookupTest.java  |   4 +-
 .../logging/log4j/core/PatternSelectorTest.java    |   6 +-
 .../log4j/core/PropertiesFileConfigTest.java       |   6 +-
 .../logging/log4j/core/ShutdownDisabledTest.java   |   2 +-
 .../core/ShutdownTimeoutConfigurationTest.java     |   2 +-
 .../logging/log4j/core/StrictXmlConfigTest.java    |   6 +-
 .../log4j/{ => core}/ThreadContextTestAccess.java  |   2 +-
 .../logging/log4j/core/TimestampMessageTest.java   |   6 +-
 .../org/apache/logging/log4j/core/XmlEvents.java   |   2 +-
 .../appender/AsyncAppenderQueueFullPolicyTest.java |   6 +-
 .../log4j/core/appender/AsyncAppenderTest.java     |   6 +-
 .../log4j/core/appender/FailoverAppenderTest.java  |   8 +-
 .../core/appender/FileAppenderPermissionsTest.java |   2 +-
 .../log4j/core/appender/InMemoryAppenderTest.java  |   2 +-
 .../appender/MemoryMappedFileAppenderTest.java     |  11 +-
 .../core/appender/OutputStreamManagerTest.java     |   2 +-
 .../appender/RandomAccessFileAppenderTest.java     |   2 +-
 .../core/appender/ScriptAppenderSelectorTest.java  |   4 +-
 .../appender/rewrite/MapRewritePolicyTest.java     |   2 +-
 .../core/appender/rewrite/RewriteAppenderTest.java |   8 +-
 .../RandomRollingAppenderOnStartupTest.java        |   2 +-
 .../appender/rolling/RollingAppenderCountTest.java |   2 +-
 .../rolling/RollingAppenderCronAndSizeTest.java    |   6 +-
 .../RollingAppenderCronEvery2DirectTest.java       |   6 +-
 .../rolling/RollingAppenderCronEvery2Test.java     |   6 +-
 .../rolling/RollingAppenderCronOnceADayTest.java   |   6 +-
 .../appender/rolling/RollingAppenderCronTest.java  |   6 +-
 .../RollingAppenderCustomDeleteActionTest.java     |   2 +-
 ...RollingAppenderDeleteAccumulatedCount1Test.java |   2 +-
 ...RollingAppenderDeleteAccumulatedCount2Test.java |   2 +-
 .../RollingAppenderDeleteAccumulatedSizeTest.java  |   2 +-
 .../rolling/RollingAppenderDeleteMaxDepthTest.java |   2 +-
 .../rolling/RollingAppenderDeleteNestedTest.java   |   2 +-
 .../RollingAppenderDeleteScriptFri13thTest.java    |   2 +-
 .../rolling/RollingAppenderDeleteScriptTest.java   |   2 +-
 .../RollingAppenderDirectWrite1906Test.java        |   6 +-
 .../RollingAppenderDirectWriteStartupSizeTest.java |   2 +-
 ...erDirectWriteTempCompressedFilePatternTest.java |   6 +-
 .../rolling/RollingAppenderDirectWriteTest.java    |   6 +-
 ...RollingAppenderDirectWriteWithFilenameTest.java |   2 +-
 ...llingAppenderDirectWriteWithHtmlLayoutTest.java |   6 +-
 ...lingAppenderDirectWriteWithReconfigureTest.java |   2 +-
 .../RollingAppenderNoUnconditionalDeleteTest.java  |   2 +-
 .../rolling/RollingAppenderReconfigureTest.java    |   6 +-
 .../rolling/RollingAppenderRestartTest.java        |   6 +-
 ...RollingAppenderSizeCompressPermissionsTest.java |   2 +-
 .../rolling/RollingAppenderSizeNoCompressTest.java |   2 +-
 .../appender/rolling/RollingAppenderSizeTest.java  |   6 +-
 .../rolling/RollingAppenderSizeWithTimeTest.java   |   2 +-
 ...llingAppenderTempCompressedFilePatternTest.java |   2 +-
 .../RollingAppenderTimeAndSizeDirectTest.java      |   6 +-
 .../rolling/RollingAppenderTimeAndSizeTest.java    |   6 +-
 .../appender/rolling/RollingAppenderTimeTest.java  |   6 +-
 .../RollingDirectSizeTimeNewDirectoryTest.java     |   2 +-
 .../rolling/RollingDirectTimeNewDirectoryTest.java |   2 +-
 .../RollingFileAppenderReconfigureTest.java        |   2 +-
 ...nderReconfigureUndefinedSystemPropertyTest.java |   2 +-
 .../appender/rolling/RollingNewDirectoryTest.java  |   2 +-
 ...ingRandomAccessFileManagerHeaderFooterTest.java |   2 +-
 .../RollingRandomAccessFileManagerTest.java        |   8 +-
 .../RollingRandomAppenderDirectWriteTest.java      |   6 +-
 ...gRandomAppenderDirectWriteWithFilenameTest.java |   2 +-
 .../rolling/RolloverWithDeletedOldFileTest.java    |   2 +-
 .../appender/rolling/RolloverWithPaddingTest.java  |   2 +-
 .../rolling/action/AbstractActionTest.java         |   2 +-
 .../routing/DefaultRouteScriptAppenderTest.java    |   4 +-
 .../appender/routing/JsonRoutingAppender2Test.java |   2 +-
 .../appender/routing/JsonRoutingAppenderTest.java  |   2 +-
 .../routing/PropertiesRoutingAppenderTest.java     |   4 +-
 .../appender/routing/RoutesScriptAppenderTest.java |   4 +-
 .../appender/routing/RoutingAppender2767Test.java  |   2 +-
 .../core/appender/routing/RoutingAppenderTest.java |   4 +-
 .../routing/RoutingAppenderWithJndiTest.java       |   6 +-
 .../routing/RoutingAppenderWithPurgingTest.java    |   4 +-
 .../routing/RoutingDefaultAppenderTest.java        |   2 +-
 .../async/AbstractAsyncThreadContextTestBase.java  |   2 +-
 .../async/AsyncAppenderExceptionHandlingTest.java  |   2 +-
 .../async/AsyncLoggersWithAsyncAppenderTest.java   |   2 +-
 .../AsyncLoggersWithAsyncLoggerConfigTest.java     |   2 +-
 .../log4j/core/async/AsyncRootReloadTest.java      |   2 +-
 .../async/BasicAsyncLoggerContextSelectorTest.java |   2 +-
 .../log4j/core/async/Log4j2Jira1688AsyncTest.java  |   4 +-
 .../log4j/core/async/Log4j2Jira1688Test.java       |   4 +-
 .../core/async/QueueFullAsyncAppenderTest.java     |   2 +-
 .../core/async/QueueFullAsyncAppenderTest2.java    |   2 +-
 ...llAsyncLoggerConfigLoggingFromToStringTest.java |   2 +-
 ...lAsyncLoggerConfigLoggingFromToStringTest2.java |   2 +-
 .../core/async/QueueFullAsyncLoggerConfigTest.java |   2 +-
 .../async/QueueFullAsyncLoggerConfigTest2.java     |   2 +-
 ...ueueFullAsyncLoggerLoggingFromToStringTest.java |   2 +-
 ...eueFullAsyncLoggerLoggingFromToStringTest2.java |   2 +-
 .../log4j/core/async/QueueFullAsyncLoggerTest.java |   2 +-
 .../core/async/QueueFullAsyncLoggerTest2.java      |   2 +-
 .../core/async/QueueFullAsyncLoggerTest3.java      |   4 +-
 .../categories/GarbageFree.java}                   |   6 +-
 .../core/config/AppenderControlArraySetTest.java   |   2 +-
 .../core/config/CompositeConfigurationTest.java    |   2 +-
 .../core/config/ConfigurationFactoryTest.java      |   2 +-
 .../log4j/core/config/CustomConfigurationTest.java |   2 +-
 .../logging/log4j/core/config/FileOutputTest.java  |   2 +-
 .../log4j/core/config/JiraLog4j2_2134Test.java     |   2 +-
 .../log4j/core/config/LoggersPluginTest.java       |   2 +-
 .../log4j/core/config/MissingRootLoggerTest.java   |   4 +-
 .../core/config/MultipleTriggeringPolicyTest.java  |   2 +-
 .../logging/log4j/core/config/PropertyTest.java    |   6 +-
 .../core/config/ReconfigurationDeadlockTest.java   |   2 +-
 .../log4j/core/config/ReliabilityStrategyTest.java |   4 +-
 .../log4j/core/config/TestConfigurator.java        |   2 +-
 .../core/config/arbiters/BasicArbiterTest.java     |   2 +-
 .../core/config/arbiters/ScriptArbiterTest.java    |   2 +-
 .../core/config/arbiters/SelectArbiterTest.java    |   2 +-
 .../core/config/plugins/LegacyPluginTest.java      |   2 +-
 .../plugins/util/PluginManagerPackagesTest.java    |  29 +-
 .../properties/PropertiesConfigurationTest.java    |   2 +-
 .../log4j/core/config/xml/XmlLoggerPropsTest.java  |   6 +-
 .../core/filter/AbstractScriptFilterTest.java      |   4 +-
 .../logging/log4j/core/filter/BurstFilterTest.java |   6 +-
 .../core/filter/DynamicThresholdFilterTest.java    |   2 +-
 .../logging/log4j/core/filter/MapFilterTest.java   |   6 +-
 .../filter/ScriptFileFilterPropertiesTest.java     |   2 +-
 .../log4j/core/filter/ScriptFileFilterTest.java    |   2 +-
 .../log4j/core/filter/ScriptFilterTest.java        |   2 +-
 .../log4j/core/filter/ScriptRefFilterTest.java     |   2 +-
 .../core/filter/StructuredDataFilterTest.java      |   2 +-
 .../logging/log4j/core/hamcrest/FileMatchers.java  | 163 -----------
 ...taFactoryPropertySetMissingConstructorTest.java |   4 +-
 .../log4j/core/impl/ContextDataFactoryTest.java    |   4 +-
 .../NestedLoggingFromThrowableMessageTest.java     |   2 +-
 .../core/impl/NestedLoggingFromToStringTest.java   |   4 +-
 .../log4j/core/junit/ConfigurationResolver.java    |  39 ---
 .../log4j/core/junit/LoggerContextResolver.java    | 157 ----------
 .../org/apache/logging/log4j/core/junit/Named.java |  41 ---
 .../log4j/core/junit/ReconfigurationPolicy.java    |  35 ---
 .../ConcurrentLoggingWithGelfLayoutTest.java       |   2 +-
 .../logging/log4j/core/layout/GelfLayout2Test.java |   6 +-
 .../logging/log4j/core/layout/GelfLayout3Test.java |   6 +-
 .../core/layout/GelfLayoutPatternSelectorTest.java |   6 +-
 .../logging/log4j/core/layout/GelfLayoutTest.java  |   4 +-
 .../logging/log4j/core/layout/HtmlLayoutTest.java  |   2 +-
 .../log4j/core/layout/Log4j2_2195_Test.java        |   6 +-
 .../core/layout/PatternLayoutLookupDateTest.java   |   6 +-
 .../layout/PatternLayoutMainMapLookupTest.java     |   8 +-
 .../core/layout/PatternLayoutNoLookupDateTest.java |   6 +-
 .../log4j/core/layout/PatternLayoutRepeatTest.java |   6 +-
 .../log4j/core/layout/Rfc5424LayoutTest.java       |   2 +-
 .../log4j/core/layout/SyslogLayoutTest.java        |   2 +-
 .../log4j/core/lookup/ContextMapLookupTest.java    |   2 +-
 .../log4j/core/lookup/InterpolatorTest.java        |   2 +-
 .../logging/log4j/core/lookup/JndiLookupTest.java  |   2 +-
 .../log4j/core/lookup/MarkerLookupConfigTest.java  |   2 +-
 .../log4j/core/net/SocketMessageLossTest.java      |   4 +-
 .../log4j/core/net/SocketReconnectTest.java        |   2 +-
 .../apache/logging/log4j/core/net/SocketTest.java  |   4 +-
 .../log4j/core/pattern/CallerInformationTest.java  |   6 +-
 .../log4j/core/pattern/DisableAnsiTest.java        |   6 +-
 .../log4j/core/pattern/ExtendedThrowableTest.java  |   6 +-
 .../core/pattern/MessageJansiConverterTest.java    |   6 +-
 .../core/pattern/MessageStyledConverterTest.java   |   6 +-
 .../log4j/core/pattern/NoConsoleNoAnsiTest.java    |   6 +-
 .../log4j/core/pattern/RegexReplacementTest.java   |   6 +-
 .../core/pattern/RepeatPatternConverterTest.java   |   2 +-
 .../log4j/core/pattern/RootThrowableTest.java      |   6 +-
 .../SequenceNumberPatternConverterTest.java        |   6 +-
 ...quenceNumberPatternConverterZeroPaddedTest.java |   6 +-
 .../log4j/core/pattern/StyleConverterTest.java     |   6 +-
 .../logging/log4j/core/pattern/ThrowableTest.java  |   6 +-
 .../log4j/core/tools/GenerateCustomLoggerTest.java |  25 +-
 .../core/tools/GenerateExtendedLoggerTest.java     |  28 +-
 .../log4j/core/util/ContextDataProviderTest.java   |   2 +-
 .../core/util/ShutdownCallbackRegistryTest.java    |   2 +-
 .../apache/logging/log4j/hamcrest/Descriptors.java |  44 ---
 .../apache/logging/log4j/hamcrest/MapMatchers.java |  62 ----
 .../logging/log4j/junit/AppenderResolver.java      |  54 ----
 .../org/apache/logging/log4j/junit/JndiRule.java   |  59 ----
 .../logging/log4j/junit/LoggerContextRule.java     | 319 ---------------------
 .../logging/log4j/junit/LoggerContextSource.java   |  79 -----
 .../MutableLogEventWithReusableParamMsgTest.java   |  61 ----
 log4j-core/src/test/java9/module-info.java         |  92 ++++++
 .../test/resources/gcFreeMixedSyncAsyncLogging.xml |   2 +-
 .../log4j/csv/layout/CsvLogEventLayoutTest.java    |   2 +-
 .../log4j/csv/layout/CsvParameterLayoutTest.java   |   2 +-
 .../log4j/flume/appender/FlumeAppenderTest.java    |   2 +-
 .../flume/appender/FlumeEmbeddedAgentTest.java     |   2 +-
 .../flume/appender/FlumeEmbeddedAppenderTest.java  |   2 +-
 .../appender/FlumePersistentAppenderTest.java      |   2 +-
 .../log4j/flume/appender/FlumePersistentPerf.java  |   2 +-
 .../log4j/io/IoBuilderCallerInfoTesting.java       |   2 +-
 .../org/apache/logging/log4j/io/IoBuilderTest.java |   2 +-
 .../log4j/io/LoggerPrintWriterJdbcH2Test.java      |   2 +-
 .../logging/log4j/jcl/CallerInformationTest.java   |   2 +-
 .../org/apache/logging/log4j/jcl/LoggerTest.java   |   2 +-
 .../JdbcAppenderColumnMappingLiteralTest.java      |   2 +-
 .../JdbcAppenderColumnMappingPatternTest.java      |   2 +-
 log4j-jpl/pom.xml                                  |   2 +-
 .../logging/log4j/jpl/Log4jSystemLoggerTest.java   |   2 +-
 .../logging/log4j/jul/AbstractLoggerTest.java      |   2 +-
 .../apache/logging/log4j/jul/ApiLoggerTest.java    |   2 +-
 .../jul/BracketInNotInterpolatedMessageTest.java   |   2 +-
 .../logging/log4j/jul/CallerInformationTest.java   |   2 +-
 .../apache/logging/log4j/jul/CoreLoggerTest.java   |   2 +-
 .../jackson/json/layout/JsonLayoutMillisTest.java  |   2 +-
 .../log4j/jackson/json/layout/JsonLayoutTest.java  |   2 +-
 .../log4j/jackson/xml/layout/XmlLayoutTest.java    |   2 +-
 .../log4j/jackson/yaml/layout/YamlLayoutTest.java  |   2 +-
 .../JsonTemplateLayoutAdditionalFieldJsonTest.java |   2 +-
 ...emplateLayoutAdditionalFieldPropertiesTest.java |   2 +-
 ...onTemplateLayoutAdditionalFieldTestHelpers.java |   2 +-
 .../JsonTemplateLayoutAdditionalFieldXmlTest.java  |   2 +-
 .../JsonTemplateLayoutAdditionalFieldYamlTest.java |   2 +-
 .../template/json/JsonTemplateLayoutTest.java      |   2 +-
 .../template/json/util/RecyclerFactoriesTest.java  |   2 +-
 .../liquibase/ext/logging/log4j2/LoggingTest.java  |   2 +-
 .../log4j/mongodb3/MongoDb3AuthFailureTest.java    |   4 +-
 .../logging/log4j/mongodb3/MongoDb3CappedTest.java |   4 +-
 .../log4j/mongodb3/MongoDb3MapMessageTest.java     |   4 +-
 .../logging/log4j/mongodb3/MongoDb3Test.java       |   4 +-
 .../log4j/mongodb3/MongoDb3TestTestRuleTest.java   |   4 +-
 .../log4j/mongodb4/MongoDb4AuthFailureTest.java    |   4 +-
 .../logging/log4j/mongodb4/MongoDb4CappedTest.java |   4 +-
 .../log4j/mongodb4/MongoDb4MapMessageTest.java     |   4 +-
 .../logging/log4j/mongodb4/MongoDb4Test.java       |   4 +-
 .../log4j/mongodb4/MongoDb4TestTestRuleTest.java   |   4 +-
 log4j-osgi/pom.xml                                 |   7 +-
 log4j-plugins/pom.xml                              | 135 +++++++--
 .../log4j/plugins/processor/PluginProcessor.java   |   4 +
 log4j-plugins/src/main/java9/module-info.java      |   2 +-
 log4j-plugins/src/test/java-test9/module-info.java |   8 +
 .../log4j/plugins}/processor/FakePlugin.java       |   2 +-
 .../plugins/processor/PluginProcessorTest.java     |   3 +-
 log4j-plugins/src/test/java9/module-info.java      |   2 +
 .../logging/slf4j/CallerInformationTest.java       |   2 +-
 .../java/org/apache/logging/slf4j/LoggerTest.java  |   2 +-
 .../org/apache/logging/slf4j/OptionalTest.java     |   2 +-
 .../logging/slf4j/CallerInformationTest.java       |   2 +-
 .../java/org/apache/logging/slf4j/LoggerTest.java  |   2 +-
 .../log4j/smtp/appender/SmtpAppenderAsyncTest.java |   2 +-
 .../log4j/smtp/appender/SmtpAppenderTest.java      |   2 +-
 .../log4j/spring/boot/SpringProfileTest.java       |   2 +-
 .../logging/log4j/taglib/CatchingTagTest.java      |   2 +-
 .../apache/logging/log4j/taglib/EnterTagTest.java  |   2 +-
 .../apache/logging/log4j/taglib/ExitTagTest.java   |   2 +-
 .../log4j/taglib/LoggingMessageTagSupportTest.java |   2 +-
 pom.xml                                            |  87 +++++-
 315 files changed, 1401 insertions(+), 2069 deletions(-)

diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/CallerInformationTest.java b/log4j-1.2-api/src/test/java/org/apache/log4j/CallerInformationTest.java
index 3ae5c34..b95545c 100644
--- a/log4j-1.2-api/src/test/java/org/apache/log4j/CallerInformationTest.java
+++ b/log4j-1.2-api/src/test/java/org/apache/log4j/CallerInformationTest.java
@@ -21,7 +21,7 @@ import static org.junit.Assert.assertEquals;
 import java.util.List;
 
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.ClassRule;
 import org.junit.Test;
 
diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/CategoryTest.java b/log4j-1.2-api/src/test/java/org/apache/log4j/CategoryTest.java
index a16f2a3..e7bd5ad 100644
--- a/log4j-1.2-api/src/test/java/org/apache/log4j/CategoryTest.java
+++ b/log4j-1.2-api/src/test/java/org/apache/log4j/CategoryTest.java
@@ -31,7 +31,7 @@ import org.apache.logging.log4j.core.config.ConfigurationFactory;
 import org.apache.logging.log4j.core.layout.PatternLayout;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.message.ObjectMessage;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.AfterClass;
 import org.junit.Before;
diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/LogWithMDCTest.java b/log4j-1.2-api/src/test/java/org/apache/log4j/LogWithMDCTest.java
index 624c806..e0936bf 100644
--- a/log4j-1.2-api/src/test/java/org/apache/log4j/LogWithMDCTest.java
+++ b/log4j-1.2-api/src/test/java/org/apache/log4j/LogWithMDCTest.java
@@ -17,7 +17,7 @@
 package org.apache.log4j;
 
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.ClassRule;
 import org.junit.Test;
 
diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/LogWithRouteTest.java b/log4j-1.2-api/src/test/java/org/apache/log4j/LogWithRouteTest.java
index 8b647fa..d98e348 100644
--- a/log4j-1.2-api/src/test/java/org/apache/log4j/LogWithRouteTest.java
+++ b/log4j-1.2-api/src/test/java/org/apache/log4j/LogWithRouteTest.java
@@ -17,7 +17,7 @@
 package org.apache.log4j;
 
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.ClassRule;
 import org.junit.Test;
 
diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/LoggerTest.java b/log4j-1.2-api/src/test/java/org/apache/log4j/LoggerTest.java
index 1742422..bdc74fe 100644
--- a/log4j-1.2-api/src/test/java/org/apache/log4j/LoggerTest.java
+++ b/log4j-1.2-api/src/test/java/org/apache/log4j/LoggerTest.java
@@ -28,7 +28,7 @@ import org.apache.logging.log4j.core.appender.AbstractAppender;
 import org.apache.logging.log4j.core.config.ConfigurationFactory;
 import org.apache.logging.log4j.core.config.Property;
 import org.apache.logging.log4j.core.layout.PatternLayout;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
diff --git a/log4j-api/pom.xml b/log4j-api/pom.xml
index 069c8e2..ffa275a 100644
--- a/log4j-api/pom.xml
+++ b/log4j-api/pom.xml
@@ -36,28 +36,38 @@
   <dependencies>
     <dependency>
       <groupId>org.osgi</groupId>
-      <artifactId>org.osgi.core</artifactId>
+      <artifactId>org.osgi.framework</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.resource</artifactId>
       <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>org.junit.vintage</groupId>
       <artifactId>junit-vintage-engine</artifactId>
+      <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-migrationsupport</artifactId>
+      <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-params</artifactId>
+      <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-engine</artifactId>
+      <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.assertj</groupId>
       <artifactId>assertj-core</artifactId>
+      <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.hamcrest</groupId>
@@ -95,21 +105,64 @@
               <goal>clean</goal>
             </goals>
           </execution>
+          <execution>
+            <id>delete-test-module-info</id>
+            <phase>generate-test-resources</phase>
+            <goals>
+              <goal>clean</goal>
+            </goals>
+            <configuration>
+              <excludeDefaultDirectories>true</excludeDefaultDirectories>
+              <verbose>true</verbose>
+              <filesets>
+                <fileset>
+                  <directory>${project.build.testOutputDirectory}</directory>
+                  <followSymlinks>false</followSymlinks>
+                  <useDefaultExcludes>true</useDefaultExcludes>
+                  <includes>
+                    <include>module-info.class</include>
+                  </includes>
+                </fileset>
+              </filesets>
+            </configuration>
+          </execution>
         </executions>
       </plugin>
       <plugin>
         <artifactId>maven-compiler-plugin</artifactId>
         <executions>
           <execution>
-            <!-- compile first without module-info -->
-            <id>base-compile</id>
+            <id>default-compile</id>
             <goals>
               <goal>compile</goal>
             </goals>
-            <phase>generate-sources</phase>
-            <configuration>
+            <configuration combine.self="override">
               <source>${maven.compiler.source}</source>
               <target>${maven.compiler.target}</target>
+              <release>${maven.compiler.release}</release>
+              <showDeprecation>true</showDeprecation>
+              <showWarnings>true</showWarnings>
+              <encoding>UTF-8</encoding>
+              <fork>true</fork>
+              <meminitial>256</meminitial>
+              <maxmem>1024</maxmem>
+              <compilerArgs>
+                <arg>-XDcompilePolicy=simple</arg>
+                <arg>-Xplugin:ErrorProne</arg>
+              </compilerArgs>
+              <compilerArguments>
+                <Xmaxwarns>10000</Xmaxwarns>
+                <Xlint />
+              </compilerArguments>
+              <annotationProcessorPaths>
+                <path>
+                  <groupId>com.google.errorprone</groupId>
+                  <artifactId>error_prone_core</artifactId>
+                  <version>${errorprone.version}</version>
+                </path>
+              </annotationProcessorPaths>
+              <forceJavacCompilerUse>true</forceJavacCompilerUse>
+              <parameters>true</parameters>
             </configuration>
           </execution>
           <execution>
@@ -118,21 +171,7 @@
             <goals>
               <goal>testCompile</goal>
             </goals>
-            <phase>generate-sources</phase>
-            <configuration>
-              <source>${maven.compiler.source}</source>
-              <target>${maven.compiler.target}</target>
-              <compileSourceRoots>
-                <compileSourceRoot>${project.basedir}/src/test/java-test</compileSourceRoot>
-              </compileSourceRoots>
-            </configuration>
-          </execution>
-          <execution>
-            <!-- compile the source -->
-            <id>default-compile</id>
-            <goals>
-              <goal>compile</goal>
-            </goals>
+            <phase>generate-test-sources</phase>
             <configuration combine.self="override">
               <source>${maven.compiler.source}</source>
               <target>${maven.compiler.target}</target>
@@ -161,7 +200,7 @@
               <forceJavacCompilerUse>true</forceJavacCompilerUse>
               <parameters>true</parameters>
               <compileSourceRoots>
-                <compileSourceRoot>${project.basedir}/src/main/java9</compileSourceRoot>
+                <compileSourceRoot>${project.basedir}/src/test/java-test</compileSourceRoot>
               </compileSourceRoots>
             </configuration>
           </execution>
@@ -203,24 +242,6 @@
         </executions>
       </plugin>
       <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>build-helper-maven-plugin</artifactId>
-        <version>3.2.0</version>
-        <executions>
-          <execution>
-            <phase>process-sources</phase>
-            <goals>
-              <goal>add-source</goal>
-            </goals>
-            <configuration>
-              <sources>
-                <source>src/main/java9</source>
-              </sources>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
         <configuration>
@@ -268,7 +289,7 @@
             <goals>
               <goal>test-jar</goal>
             </goals>
-            <phase>process-resources</phase>
+            <phase>process-test-sources</phase>
             <configuration>
               <archive>
                 <manifestFile>${manifestfile}</manifestFile>
@@ -313,7 +334,7 @@
               sun.reflect;resolution:=optional,
               *
             </Import-Package>
-            <Bundle-Activator>org.apache.logging.log4j.util.Activator</Bundle-Activator>
+            <Bundle-Activator>org.apache.logging.log4j.osgi.Activator</Bundle-Activator>
             <_fixupmessages>"Classes found in the wrong directory";is:=warning</_fixupmessages>
           </instructions>
         </configuration>
diff --git a/log4j-api/src/main/java9/module-info.java b/log4j-api/src/main/java/module-info.java
similarity index 97%
rename from log4j-api/src/main/java9/module-info.java
rename to log4j-api/src/main/java/module-info.java
index 45d0de3..b74edd7 100644
--- a/log4j-api/src/main/java9/module-info.java
+++ b/log4j-api/src/main/java/module-info.java
@@ -22,6 +22,7 @@ module org.apache.logging.log4j {
     exports org.apache.logging.log4j.status;
     exports org.apache.logging.log4j.util;
 
+    requires transitive org.osgi.framework;
     uses org.apache.logging.log4j.spi.Provider;
     uses org.apache.logging.log4j.util.PropertySource;
     uses org.apache.logging.log4j.message.ThreadDumpMessage.ThreadInfoFactory;
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/SortedArrayStringMap.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/SortedArrayStringMap.java
index db5bcca..1dec0c2 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/SortedArrayStringMap.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/SortedArrayStringMap.java
@@ -160,6 +160,14 @@ public class SortedArrayStringMap implements IndexedStringMap {
         }
     }
 
+    /**
+     * For unit testing.
+     * @return The threshold.
+     */
+    public int getThreshold() {
+        return threshold;
+    }
+
     private void assertNotFrozen() {
         if (immutable) {
             throw new UnsupportedOperationException(FROZEN);
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/categories/AsyncLoggers.java b/log4j-api/src/test/java-test/module-info.java
similarity index 58%
rename from log4j-core/src/test/java/org/apache/logging/log4j/categories/AsyncLoggers.java
rename to log4j-api/src/test/java-test/module-info.java
index b46b185..9541d67 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/categories/AsyncLoggers.java
+++ b/log4j-api/src/test/java-test/module-info.java
@@ -14,10 +14,19 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-package org.apache.logging.log4j.categories;
+module org.apache.logging.log4j.test {
+    exports org.apache.logging.log4j.test;
+    exports org.apache.logging.log4j.test.junit;
+    opens org.apache.logging.log4j.test.junit to org.junit.platform.commons;
 
-/**
- * Category for tests related to AsyncLogger (requires LMAX Disruptor dependency).
- */
-public interface AsyncLoggers {
-}
+    requires org.apache.logging.log4j;
+    requires com.fasterxml.jackson.core;
+    requires com.fasterxml.jackson.databind;
+    requires org.assertj.core;
+    requires org.junit.jupiter.api;
+    requires org.junit.jupiter.engine;
+    requires org.junit.jupiter.params;
+    requires org.junit.platform.commons;
+    requires org.junit.platform.engine;
+    requires junit;
+}
\ No newline at end of file
diff --git a/log4j-api/src/test/java/module-info.java b/log4j-api/src/test/java/module-info.java
index 9ff63a2..2d0046f 100644
--- a/log4j-api/src/test/java/module-info.java
+++ b/log4j-api/src/test/java/module-info.java
@@ -1,4 +1,21 @@
+/*
+ * 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.
+ */
 open module org.apache.logging.log4j {
+    exports org.apache.logging.log4j.test;
     exports org.apache.logging.log4j.test.junit;
 
     requires com.fasterxml.jackson.core;
diff --git a/log4j-core/pom.xml b/log4j-core-gctests/pom.xml
similarity index 52%
copy from log4j-core/pom.xml
copy to log4j-core-gctests/pom.xml
index f7d81f8..5ea6ffb 100644
--- a/log4j-core/pom.xml
+++ b/log4j-core-gctests/pom.xml
@@ -23,10 +23,10 @@
     <version>3.0.0-SNAPSHOT</version>
     <relativePath>../</relativePath>
   </parent>
-  <artifactId>log4j-core</artifactId>
+  <artifactId>log4j-core-gctests</artifactId>
   <packaging>jar</packaging>
-  <name>Apache Log4j Core</name>
-  <description>The Apache Log4j Implementation</description>
+  <name>Apache Log4j Core Garbage Collection Tests</name>
+  <description>Apache Log4j Implementation GC Tests</description>
   <properties>
     <log4jParentDir>${basedir}/..</log4jParentDir>
     <docLabel>Core Documentation</docLabel>
@@ -44,11 +44,9 @@
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-plugins</artifactId>
     </dependency>
-    <!-- Used for OSGi bundle support -->
     <dependency>
-      <groupId>org.osgi</groupId>
-      <artifactId>org.osgi.core</artifactId>
-      <scope>provided</scope>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-core</artifactId>
     </dependency>
     <!-- Required for AsyncLoggers -->
     <dependency>
@@ -154,11 +152,6 @@
       <artifactId>slf4j-api</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-ext</artifactId>
-      <scope>test</scope>
-    </dependency>
     <!-- JUnit, naturally -->
     <dependency>
       <groupId>org.junit.vintage</groupId>
@@ -209,17 +202,6 @@
     </dependency>
     <!-- JNDI and JMS tests -->
     <dependency>
-      <groupId>org.apache.activemq</groupId>
-      <artifactId>activemq-broker</artifactId>
-      <scope>test</scope>
-      <exclusions>
-        <exclusion>
-          <groupId>org.apache.geronimo.specs</groupId>
-          <artifactId>geronimo-jms_1.1_spec</artifactId>
-        </exclusion>
-      </exclusions>    
-    </dependency>
-    <dependency>
       <groupId>commons-logging</groupId>
       <artifactId>commons-logging</artifactId>
       <scope>test</scope>
@@ -235,27 +217,6 @@
       <artifactId>logback-classic</artifactId>
       <scope>test</scope>
     </dependency>
-    <!-- OSGi tests -->
-    <dependency>
-      <groupId>org.eclipse.tycho</groupId>
-      <artifactId>org.eclipse.osgi</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.felix</groupId>
-      <artifactId>org.apache.felix.framework</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.codehaus.plexus</groupId>
-      <artifactId>plexus-utils</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.maven</groupId>
-      <artifactId>maven-core</artifactId>
-      <scope>test</scope>
-    </dependency>
     <!--  GELF -->
     <dependency>
       <groupId>net.javacrumbs.json-unit</groupId>
@@ -314,6 +275,12 @@
       <groupId>com.google.code.java-allocation-instrumenter</groupId>
       <artifactId>java-allocation-instrumenter</artifactId>
       <scope>test</scope>
+      <exclusions>
+        <exclusion>
+          <groupId>com.google.guava</groupId>
+          <artifactId>guava-testlib</artifactId>
+        </exclusion>
+      </exclusions>
     </dependency>
     <dependency>
       <groupId>org.hdrhistogram</groupId>
@@ -344,14 +311,6 @@
     <plugins>
       <plugin>
         <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <excludedGroups>
-            org.apache.logging.log4j.categories.PerformanceTests
-          </excludedGroups>
-          <systemPropertyVariables>
-            <org.apache.activemq.SERIALIZABLE_PACKAGES>*</org.apache.activemq.SERIALIZABLE_PACKAGES>
-          </systemPropertyVariables>
-        </configuration>
       </plugin>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
@@ -363,196 +322,35 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-jar-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>default-jar</id>
-            <goals>
-              <goal>jar</goal>
-            </goals>
-            <configuration combine.self="override">
-              <archive>
-                <manifestFile>${manifestfile}</manifestFile>
-                <manifestEntries>
-                  <Specification-Title>${project.name}</Specification-Title>
-                  <Specification-Version>${project.version}</Specification-Version>
-                  <Specification-Vendor>${project.organization.name}</Specification-Vendor>
-                  <Implementation-Title>${project.name}</Implementation-Title>
-                  <Implementation-Version>${project.version}</Implementation-Version>
-                  <Implementation-Vendor>${project.organization.name}</Implementation-Vendor>
-                  <Implementation-Vendor-Id>org.apache</Implementation-Vendor-Id>
-                  <X-Compile-Source-JDK>${maven.compiler.source}</X-Compile-Source-JDK>
-                  <X-Compile-Target-JDK>${maven.compiler.target}</X-Compile-Target-JDK>
-                  <Automatic-Module-Name>org.apache.logging.log4j.core</Automatic-Module-Name>
-                  <Multi-Release>true</Multi-Release>
-                </manifestEntries>
-              </archive>
-            </configuration>
-          </execution>
-          <execution>
-            <id>default</id>
-            <goals>
-              <goal>test-jar</goal>
-            </goals>
-            <configuration>
-              <archive>
-                <manifestFile>${manifestfile}</manifestFile>
-                <manifestEntries>
-                  <Specification-Title>${project.name}</Specification-Title>
-                  <Specification-Version>${project.version}</Specification-Version>
-                  <Specification-Vendor>${project.organization.name}</Specification-Vendor>
-                  <Implementation-Title>${project.name}</Implementation-Title>
-                  <Implementation-Version>${project.version}</Implementation-Version>
-                  <Implementation-Vendor>${project.organization.name}</Implementation-Vendor>
-                  <Implementation-Vendor-Id>org.apache</Implementation-Vendor-Id>
-                  <X-Compile-Source-JDK>${maven.compiler.source}</X-Compile-Source-JDK>
-                  <X-Compile-Target-JDK>${maven.compiler.target}</X-Compile-Target-JDK>
-                </manifestEntries>
-              </archive>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.felix</groupId>
-        <artifactId>maven-bundle-plugin</artifactId>
-        <configuration>
-          <instructions>
-            <Bundle-SymbolicName>org.apache.logging.log4j.core</Bundle-SymbolicName>
-            <!-- TODO: exclude internal classes from export -->
-            <Export-Package>org.apache.logging.log4j.core.*</Export-Package>
-            <Import-Package>
-              sun.reflect;resolution:=optional,
-              org.apache.logging.log4j.util,
-              org.apache.logging.log4j.plugins,
-              org.apache.logging.log4j.plugins.convert,
-              org.apache.logging.log4j.plugins.processor,
-              org.apache.logging.log4j.plugins.util,
-              org.apache.logging.log4j.plugins.validation,
-              org.apache.logging.log4j.plugins.inject,
-              *
-            </Import-Package>
-            <Bundle-Activator>org.apache.logging.log4j.core.osgi.Activator</Bundle-Activator>
-          </instructions>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-  <reporting>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-changes-plugin</artifactId>
-        <version>${changes.plugin.version}</version>
-        <reportSets>
-          <reportSet>
-            <reports>
-              <report>changes-report</report>
-            </reports>
-          </reportSet>
-        </reportSets>
         <configuration>
-          <issueLinkTemplate>%URL%/%ISSUE%</issueLinkTemplate>
-          <useJql>true</useJql>
-          <component>Appenders, Configuration, Configurators, Core, Filters, Layouts, Lookups, Pattern Converters, Reconfiguration</component>
+          <skip>true</skip>
         </configuration>
       </plugin>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-checkstyle-plugin</artifactId>
-        <version>${checkstyle.plugin.version}</version>
+        <artifactId>maven-deploy-plugin</artifactId>
+        <version>${deploy.plugin.version}</version>
         <configuration>
-          <!--<propertiesLocation>${vfs.parent.dir}/checkstyle.properties</propertiesLocation> -->
-          <configLocation>${log4jParentDir}/checkstyle.xml</configLocation>
-          <suppressionsLocation>${log4jParentDir}/checkstyle-suppressions.xml</suppressionsLocation>
-          <enableRulesSummary>false</enableRulesSummary>
-          <propertyExpansion>basedir=${basedir}</propertyExpansion>
-          <propertyExpansion>licensedir=${log4jParentDir}/checkstyle-header.txt</propertyExpansion>
+          <skip>true</skip>
         </configuration>
       </plugin>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-javadoc-plugin</artifactId>
-        <version>${javadoc.plugin.version}</version>
+        <artifactId>maven-site-plugin</artifactId>
         <configuration>
-          <failOnError>false</failOnError>
-          <source>8</source>
-          <bottom><![CDATA[<p align="center">Copyright &#169; {inceptionYear}-{currentYear} {organizationName}. All Rights Reserved.<br />
-            Apache Logging, Apache Log4j, Log4j, Apache, the Apache feather logo, the Apache Logging project logo,
-            and the Apache Log4j logo are trademarks of The Apache Software Foundation.</p>]]></bottom>
-          <!-- module link generation is completely broken in the javadoc plugin for a multi-module non-aggregating
-               project -->
-          <additionalparam>${javadoc.opts}</additionalparam>
-          <detectOfflineLinks>false</detectOfflineLinks>
-          <linksource>true</linksource>
-          <links>
-            <link>http://docs.oracle.com/javaee/6/api/</link>
-            <link>http://www.osgi.org/javadoc/r4v43/core/</link>
-            <link>https://commons.apache.org/proper/commons-lang/javadocs/api-release/</link>
-          </links>
-          <groups>
-            <group>
-              <title>Core API</title>
-              <packages>org.apache.logging.log4j.core</packages>
-            </group>
-            <group>
-              <title>Configuration</title>
-              <packages>org.apache.logging.log4j.core.config*:org.apache.logging.log4j.core.selector</packages>
-            </group>
-            <group>
-              <title>Core Plugins</title>
-              <packages>org.apache.logging.log4j.core.appender*:org.apache.logging.log4j.core.filter:org.apache.logging.log4j.core.layout:org.apache.logging.log4j.core.lookup:org.apache.logging.log4j.core.pattern:org.apache.logging.log4j.core.script</packages>
-            </group>
-            <group>
-              <title>Tools</title>
-              <packages>org.apache.logging.log4j.core.net*:org.apache.logging.log4j.core.tools</packages>
-            </group>
-            <group>
-              <title>Internals</title>
-              <packages>org.apache.logging.log4j.core.async:org.apache.logging.log4j.core.impl:org.apache.logging.log4j.core.util*:org.apache.logging.log4j.core.osgi:org.apache.logging.log4j.core.jackson:org.apache.logging.log4j.core.jmx</packages>
-            </group>
-          </groups>
+          <skip>true</skip>
+          <skipDeploy>true</skipDeploy>
         </configuration>
-        <reportSets>
-          <reportSet>
-            <id>non-aggregate</id>
-            <reports>
-              <report>javadoc</report>
-            </reports>
-          </reportSet>
-        </reportSets>
-      </plugin>
-      <plugin>
-        <groupId>com.github.spotbugs</groupId>
-        <artifactId>spotbugs-maven-plugin</artifactId>
       </plugin>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jxr-plugin</artifactId>
-        <version>${jxr.plugin.version}</version>
-        <reportSets>
-          <reportSet>
-            <id>non-aggregate</id>
-            <reports>
-              <report>jxr</report>
-            </reports>
-          </reportSet>
-          <reportSet>
-            <id>aggregate</id>
-            <reports>
-              <report>aggregate</report>
-            </reports>
-          </reportSet>
-        </reportSets>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-pmd-plugin</artifactId>
-        <version>${pmd.plugin.version}</version>
+        <artifactId>maven-doap-plugin</artifactId>
+        <version>1.2</version>
         <configuration>
-          <targetJdk>${maven.compiler.target}</targetJdk>
+          <skip>true</skip>
         </configuration>
       </plugin>
     </plugins>
-  </reporting>
+  </build>
 </project>
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeAsynchronousLoggingTest.java b/log4j-core-gctests/src/test/java/org/apache/logging/log4j/core/test/gc/GcFreeAsynchronousLoggingTest.java
similarity index 91%
rename from log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeAsynchronousLoggingTest.java
rename to log4j-core-gctests/src/test/java/org/apache/logging/log4j/core/test/gc/GcFreeAsynchronousLoggingTest.java
index 286a113..ef0d19f 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeAsynchronousLoggingTest.java
+++ b/log4j-core-gctests/src/test/java/org/apache/logging/log4j/core/test/gc/GcFreeAsynchronousLoggingTest.java
@@ -14,9 +14,11 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-package org.apache.logging.log4j.core;
+package org.apache.logging.log4j.core.test.gc;
 
 import org.apache.logging.log4j.core.async.AsyncLoggerContextSelector;
+import org.apache.logging.log4j.core.categories.GarbageFree;
+import org.junit.experimental.categories.Category;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
 
@@ -27,6 +29,7 @@ import org.junit.jupiter.api.Test;
  */
 @Tag("allocation")
 @Tag("functional")
+@Category(GarbageFree.class)
 public class GcFreeAsynchronousLoggingTest {
 
     @Test
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeLoggingTestUtil.java b/log4j-core-gctests/src/test/java/org/apache/logging/log4j/core/test/gc/GcFreeLoggingTestUtil.java
similarity index 95%
rename from log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeLoggingTestUtil.java
rename to log4j-core-gctests/src/test/java/org/apache/logging/log4j/core/test/gc/GcFreeLoggingTestUtil.java
index 94c5fc1..3ad896e 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeLoggingTestUtil.java
+++ b/log4j-core-gctests/src/test/java/org/apache/logging/log4j/core/test/gc/GcFreeLoggingTestUtil.java
@@ -14,7 +14,7 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-package org.apache.logging.log4j.core;
+package org.apache.logging.log4j.core.test.gc;
 
 import com.google.monitoring.runtime.instrumentation.AllocationRecorder;
 import com.google.monitoring.runtime.instrumentation.Sampler;
@@ -52,9 +52,9 @@ public enum GcFreeLoggingTestUtil {;
         System.setProperty("log4j2.is.webapp", "false");
         System.setProperty("log4j.configurationFile", configurationFile);
 
-        assertTrue(Constants.ENABLE_THREADLOCALS, "Constants.ENABLE_THREADLOCALS");
-        assertTrue(Constants.ENABLE_DIRECT_ENCODERS, "Constants.ENABLE_DIRECT_ENCODERS");
-        assertFalse(Constants.IS_WEB_APP, "Constants.IS_WEB_APP");
+        Assertions.assertTrue(Constants.ENABLE_THREADLOCALS, "Constants.ENABLE_THREADLOCALS");
+        Assertions.assertTrue(Constants.ENABLE_DIRECT_ENCODERS, "Constants.ENABLE_DIRECT_ENCODERS");
+        Assertions.assertFalse(Constants.IS_WEB_APP, "Constants.IS_WEB_APP");
 
         final MyCharSeq myCharSeq = new MyCharSeq();
         final Marker testGrandParent = MarkerManager.getMarker("testGrandParent");
@@ -173,7 +173,7 @@ public enum GcFreeLoggingTestUtil {;
                         Pattern.quote("[main] value1 {aKey=value1, " +
                                 "key2=value2, prop1=value1, prop2=value2} " +
                                 "This message is logged to the console"));
-                assertTrue(
+                Assertions.assertTrue(
                         line.matches(firstLinePattern),
                         "pattern mismatch at line 1: " + line);
             }
@@ -181,7 +181,7 @@ public enum GcFreeLoggingTestUtil {;
             // Check the rest of the lines. We are looking for the messages written to System.err
             // in the sampleAllocation() method above in executeLogging().
             else {
-                assertFalse(
+                Assertions.assertFalse(
                         line.contains(" allocated ") || line.contains(" array "),
                         "(allocated|array) pattern matches at line " + lineNumber + ": " + line);
             }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeMixedSyncAyncLoggingTest.java b/log4j-core-gctests/src/test/java/org/apache/logging/log4j/core/test/gc/GcFreeMixedSyncAyncLoggingTest.java
similarity index 90%
rename from log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeMixedSyncAyncLoggingTest.java
rename to log4j-core-gctests/src/test/java/org/apache/logging/log4j/core/test/gc/GcFreeMixedSyncAyncLoggingTest.java
index ed844d0..91fdde6 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeMixedSyncAyncLoggingTest.java
+++ b/log4j-core-gctests/src/test/java/org/apache/logging/log4j/core/test/gc/GcFreeMixedSyncAyncLoggingTest.java
@@ -14,8 +14,10 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-package org.apache.logging.log4j.core;
+package org.apache.logging.log4j.core.test.gc;
 
+import org.apache.logging.log4j.core.categories.GarbageFree;
+import org.junit.experimental.categories.Category;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
 
@@ -26,6 +28,7 @@ import org.junit.jupiter.api.Test;
  */
 @Tag("allocation")
 @Tag("functional")
+@Category(GarbageFree.class)
 public class GcFreeMixedSyncAyncLoggingTest {
 
     @Test
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeSynchronousLoggingTest.java b/log4j-core-gctests/src/test/java/org/apache/logging/log4j/core/test/gc/GcFreeSynchronousLoggingTest.java
similarity index 89%
rename from log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeSynchronousLoggingTest.java
rename to log4j-core-gctests/src/test/java/org/apache/logging/log4j/core/test/gc/GcFreeSynchronousLoggingTest.java
index 99648de..c45bc7e 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeSynchronousLoggingTest.java
+++ b/log4j-core-gctests/src/test/java/org/apache/logging/log4j/core/test/gc/GcFreeSynchronousLoggingTest.java
@@ -14,8 +14,10 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-package org.apache.logging.log4j.core;
+package org.apache.logging.log4j.core.test.gc;
 
+import org.apache.logging.log4j.core.categories.GarbageFree;
+import org.junit.experimental.categories.Category;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
 
@@ -26,6 +28,7 @@ import org.junit.jupiter.api.Test;
  */
 @Tag("allocation")
 @Tag("functional")
+@Category(GarbageFree.class)
 public class GcFreeSynchronousLoggingTest {
 
     @Test
diff --git a/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/SecureSocketAppenderSocketOptionsTest.java b/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/SecureSocketAppenderSocketOptionsTest.java
index ecccfb0..b602734 100644
--- a/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/SecureSocketAppenderSocketOptionsTest.java
+++ b/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/SecureSocketAppenderSocketOptionsTest.java
@@ -33,7 +33,7 @@ import org.apache.logging.log4j.core.net.ssl.TestConstants;
 import org.apache.logging.log4j.core.net.ssl.TrustStoreConfiguration;
 import org.apache.logging.log4j.core.util.NullOutputStream;
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.AvailablePortFinder;
+import org.apache.logging.log4j.core.test.AvailablePortFinder;
 import org.junit.AfterClass;
 import org.junit.Assert;
 import org.junit.Assume;
diff --git a/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderBufferSizeTest.java b/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderBufferSizeTest.java
index 8d8b905..65111ff 100644
--- a/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderBufferSizeTest.java
+++ b/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderBufferSizeTest.java
@@ -22,7 +22,7 @@ import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.appender.SocketAppenderTest.TcpSocketTestServer;
 import org.apache.logging.log4j.core.util.Constants;
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.AvailablePortFinder;
+import org.apache.logging.log4j.core.test.AvailablePortFinder;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
diff --git a/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderSocketOptionsTest.java b/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderSocketOptionsTest.java
index db37ffd..5aba225 100644
--- a/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderSocketOptionsTest.java
+++ b/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderSocketOptionsTest.java
@@ -26,7 +26,7 @@ import org.apache.logging.log4j.core.net.SocketOptions;
 import org.apache.logging.log4j.core.net.TcpSocketManager;
 import org.apache.logging.log4j.core.util.NullOutputStream;
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.AvailablePortFinder;
+import org.apache.logging.log4j.core.test.AvailablePortFinder;
 import org.junit.AfterClass;
 import org.junit.Assert;
 import org.junit.Assume;
diff --git a/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderTest.java b/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderTest.java
index 807e8ac..5b330f2 100644
--- a/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderTest.java
+++ b/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderTest.java
@@ -48,7 +48,7 @@ import org.apache.logging.log4j.core.util.Constants;
 import org.apache.logging.log4j.core.util.Throwables;
 import org.apache.logging.log4j.jackson.json.Log4jJsonObjectMapper;
 import org.apache.logging.log4j.jackson.json.layout.JsonLayout;
-import org.apache.logging.log4j.test.AvailablePortFinder;
+import org.apache.logging.log4j.core.test.AvailablePortFinder;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Assert;
diff --git a/log4j-core/README.md b/log4j-core/README.md
new file mode 100644
index 0000000..03f5046
--- /dev/null
+++ b/log4j-core/README.md
@@ -0,0 +1,37 @@
+# Building Log4j Core
+
+Log4j 2 supports the Java Platform Module System. JPMS has requirements that conflict with several things 
+Log4j also tries to support:
+1. OSGi - OSGi frameworks are not packaged as OSGi modules. Including an OSGi implementation will cause
+compiler errors while resolving the JPMS module inforation.
+2. Garbage Free - The Google tool Log4j uses to verify that Log4j core is garbage free violates JPMS rules. The test 
+compilations fail when it is included as a dependency.
+3. Compiler bugs - When compiling with module-info.java included the classes in the appender, layout, and filter 
+directories get "duplicate class" errors. For some reason these directory names are being interpreted as starting 
+with upper case letters even though they are not. For some reason the compiler is showing an error 
+that the class cannot be found even though it is being generated. See
+   [JDK-8265826](https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8265826).
+4. Test classes that are used by other modules - Several test classes are used by other log4j modules and need
+to be passed to them. This requires these classes exist in a package that is not used in log4j-core.
+5. Test classes used by log4j-core must use the same package space to be able to access some methods in the classes 
+being tested.
+6. Once Java has compiled the main module with a module-info.java all test compiles also require one. Likewise,
+a test compile with a module-info.java is not allowed if the main compile doesn't have one.
+   
+For these reasons the build will need to be processed as follows:
+1. Move the Garbage Free tests to their own module. This will require copying all the test resources.
+1. Compile all the main classes except module-info.java with the Plugin preprocessor.
+1. Compile the main module-info.java.  
+1. Compile the test classes used by other modules with module-info.java and with the plugin preprocessor.
+1. Package these test classes in a test jar.
+1. Delete the module-info and generated source for the test classes.
+1. Move the main module-info to a temp location.   
+1. Compile the unit test classes without module-info.java.
+1. Move the main module-info back to the classes directory.   
+1. Compile module-info.java for unit tests.
+1. Run the unit tests.
+1. Create the main jar if the unit tests pass.
+
+Once the JDK bug is fixed this process can be simplified quite a bit since the components will all be able to be 
+compiled once with the module-info.java file.
+   
\ No newline at end of file
diff --git a/log4j-core/pom.xml b/log4j-core/pom.xml
index f7d81f8..8cb6145 100644
--- a/log4j-core/pom.xml
+++ b/log4j-core/pom.xml
@@ -47,7 +47,12 @@
     <!-- Used for OSGi bundle support -->
     <dependency>
       <groupId>org.osgi</groupId>
-      <artifactId>org.osgi.core</artifactId>
+      <artifactId>org.osgi.framework</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.resource</artifactId>
       <scope>provided</scope>
     </dependency>
     <!-- Required for AsyncLoggers -->
@@ -154,11 +159,6 @@
       <artifactId>slf4j-api</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-ext</artifactId>
-      <scope>test</scope>
-    </dependency>
     <!-- JUnit, naturally -->
     <dependency>
       <groupId>org.junit.vintage</groupId>
@@ -181,6 +181,11 @@
       <artifactId>hamcrest-all</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.assertj</groupId>
+      <artifactId>assertj-core</artifactId>
+      <scope>test</scope>
+    </dependency>
     <!-- Mocking framework for use with JUnit -->
     <dependency>
       <groupId>org.mockito</groupId>
@@ -209,17 +214,6 @@
     </dependency>
     <!-- JNDI and JMS tests -->
     <dependency>
-      <groupId>org.apache.activemq</groupId>
-      <artifactId>activemq-broker</artifactId>
-      <scope>test</scope>
-      <exclusions>
-        <exclusion>
-          <groupId>org.apache.geronimo.specs</groupId>
-          <artifactId>geronimo-jms_1.1_spec</artifactId>
-        </exclusion>
-      </exclusions>    
-    </dependency>
-    <dependency>
       <groupId>commons-logging</groupId>
       <artifactId>commons-logging</artifactId>
       <scope>test</scope>
@@ -235,27 +229,6 @@
       <artifactId>logback-classic</artifactId>
       <scope>test</scope>
     </dependency>
-    <!-- OSGi tests -->
-    <dependency>
-      <groupId>org.eclipse.tycho</groupId>
-      <artifactId>org.eclipse.osgi</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.felix</groupId>
-      <artifactId>org.apache.felix.framework</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.codehaus.plexus</groupId>
-      <artifactId>plexus-utils</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.maven</groupId>
-      <artifactId>maven-core</artifactId>
-      <scope>test</scope>
-    </dependency>
     <!--  GELF -->
     <dependency>
       <groupId>net.javacrumbs.json-unit</groupId>
@@ -309,12 +282,6 @@
       <artifactId>groovy-dateutil</artifactId>
       <scope>test</scope>
     </dependency>
-    <!-- GC-free -->
-    <dependency>
-      <groupId>com.google.code.java-allocation-instrumenter</groupId>
-      <artifactId>java-allocation-instrumenter</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
       <groupId>org.hdrhistogram</groupId>
       <artifactId>HdrHistogram</artifactId>
@@ -343,14 +310,217 @@
   <build>
     <plugins>
       <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-clean-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>delete-test-module-info</id>
+            <phase>generate-test-sources</phase>
+            <goals>
+              <goal>clean</goal>
+            </goals>
+            <configuration>
+              <excludeDefaultDirectories>true</excludeDefaultDirectories>
+              <verbose>true</verbose>
+              <filesets>
+                <fileset>
+                  <directory>${project.build.testOutputDirectory}</directory>
+                  <followSymlinks>false</followSymlinks>
+                  <useDefaultExcludes>true</useDefaultExcludes>
+                  <includes>
+                    <include>module-info.class</include>
+                    <include>**/Log4jPlugins.class</include>
+                  </includes>
+                </fileset>
+                <fileset>
+                  <directory>${project.build.directory}/generated-test-sources/test-annotations</directory>
+                  <followSymlinks>false</followSymlinks>
+                  <useDefaultExcludes>true</useDefaultExcludes>
+                </fileset>
+              </filesets>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <executions>
+          <execution>
+            <!-- compile the source except for module-info.java -->
+            <id>default-compile</id>
+            <goals>
+              <goal>compile</goal>
+            </goals>
+            <phase>compile</phase>
+            <configuration combine.self="override">
+              <source>${maven.compiler.source}</source>
+              <target>${maven.compiler.target}</target>
+              <release>${maven.compiler.release}</release>
+              <forceJavacCompilerUse>true</forceJavacCompilerUse>
+              <parameters>true</parameters>
+            </configuration>
+          </execution>
+          <execution>
+            <!-- compile the module-info.java -->
+            <id>compile-module</id>
+            <goals>
+              <goal>compile</goal>
+            </goals>
+            <phase>compile</phase>
+            <configuration combine.self="override">
+              <source>${maven.compiler.source}</source>
+              <target>${maven.compiler.target}</target>
+              <release>${maven.compiler.release}</release>
+              <forceJavacCompilerUse>true</forceJavacCompilerUse>
+              <parameters>true</parameters>
+              <compileSourceRoots>
+                <compileSourceRoot>${project.basedir}/src/main/java9</compileSourceRoot>
+              </compileSourceRoots>
+            </configuration>
+          </execution>
+          <execution>
+            <!-- compile only the classes used by other modules. -->
+            <id>compile-test-utils</id>
+            <goals>
+              <goal>testCompile</goal>
+            </goals>
+            <phase>compile</phase>
+            <configuration>
+              <source>${maven.compiler.source}</source>
+              <target>${maven.compiler.target}</target>
+              <release>${maven.compiler.release}</release>
+              <compileSourceRoots>
+                <compileSourceRoot>${project.basedir}/src/test/java-test</compileSourceRoot>
+                <compileSourceRoot>${project.basedir}/src/test/java-test9</compileSourceRoot>
+              </compileSourceRoots>
+              <forceJavacCompilerUse>true</forceJavacCompilerUse>
+              <parameters>true</parameters>
+            </configuration>
+          </execution>
+          <execution>
+            <!-- Compile unit tests without module-info -->
+            <id>compile-unit-tests</id>
+            <goals>
+              <goal>testCompile</goal>
+            </goals>
+            <phase>process-test-sources</phase>
+            <configuration>
+              <source>${maven.compiler.source}</source>
+              <target>${maven.compiler.target}</target>
+              <release>${maven.compiler.release}</release>
+              <forceJavacCompilerUse>true</forceJavacCompilerUse>
+              <parameters>true</parameters>
+              <compilerArgs>
+                <arg>-ApluginPackage=org.apache.logging.log4j.core.test</arg>
+              </compilerArgs>
+              <compileSourceRoots>
+                <compileSourceRoot>${project.basedir}/src/test/java</compileSourceRoot>
+                <compileSourceRoot>${project.basedir}/src/test/java-test</compileSourceRoot>
+              </compileSourceRoots>
+            </configuration>
+          </execution>
+          <execution>
+            <!-- compile the unit tests module-info -->
+            <id>default-testCompile</id>
+            <goals>
+              <goal>testCompile</goal>
+            </goals>
+            <configuration>
+              <source>${maven.compiler.source}</source>
+              <target>${maven.compiler.target}</target>
+              <release>${maven.compiler.release}</release>
+              <forceJavacCompilerUse>true</forceJavacCompilerUse>
+              <parameters>true</parameters>
+              <compileSourceRoots>
+                <compileSourceRoot>${project.basedir}/src/test/java9</compileSourceRoot>
+              </compileSourceRoots>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <artifactId>maven-antrun-plugin</artifactId>
+        <version>3.0.0</version>
+        <executions>
+          <execution>
+            <phase>generate-test-sources</phase>
+            <configuration>
+              <target>
+                <move todir="${project.build.directory}/saved-classes">
+                  <fileset dir="${project.build.outputDirectory}">
+                    <include name="module-info.class"/>
+                  </fileset>
+                </move>
+              </target>
+            </configuration>
+            <goals>
+              <goal>run</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <!-- Include the standard NOTICE and LICENSE -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-resources-plugin</artifactId>
+        <version>3.2.0</version>
+        <executions>
+          <execution>
+            <id>default-resources</id>
+            <goals>
+              <goal>resources</goal>
+            </goals>
+            <phase>generate-resources</phase>
+          </execution>
+          <execution>
+            <id>copy-to-test</id>
+            <phase>process-classes</phase>
+            <goals>
+              <goal>copy-resources</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>${project.build.testOutputDirectory}</outputDirectory>
+              <overwrite>true</overwrite>
+              <resources>
+                <resource>
+                  <directory>${project.build.outputDirectory}</directory>
+                  <includes>
+                    <include>org/apache/logging/log4j/core/**/*.class</include>
+                  </includes>
+                </resource>
+              </resources>
+            </configuration>
+          </execution>
+          <execution>
+            <id>restore-module-info</id>
+            <phase>process-test-resources</phase>
+            <goals>
+              <goal>copy-resources</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>${project.build.outputDirectory}</outputDirectory>
+              <overwrite>true</overwrite>
+              <resources>
+                <resource>
+                  <directory>${project.build.directory}/saved-classes</directory>
+                  <includes>
+                    <include>module-info.class</include>
+                  </includes>
+                </resource>
+              </resources>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
         <artifactId>maven-surefire-plugin</artifactId>
         <configuration>
           <excludedGroups>
-            org.apache.logging.log4j.categories.PerformanceTests
+            org.apache.logging.log4j.categories.PerformanceTests,
           </excludedGroups>
-          <systemPropertyVariables>
-            <org.apache.activemq.SERIALIZABLE_PACKAGES>*</org.apache.activemq.SERIALIZABLE_PACKAGES>
-          </systemPropertyVariables>
+          <argLine>--add-opens java.base/java.lang.reflect=org.apache.commons.lang3
+            --add-opens org.apache.logging.log4j.plugins.test/org.apache.logging.log4j.plugins.test.validation=org.apache.logging.log4j.core
+          </argLine>
         </configuration>
       </plugin>
       <plugin>
@@ -382,8 +552,6 @@
                   <Implementation-Vendor-Id>org.apache</Implementation-Vendor-Id>
                   <X-Compile-Source-JDK>${maven.compiler.source}</X-Compile-Source-JDK>
                   <X-Compile-Target-JDK>${maven.compiler.target}</X-Compile-Target-JDK>
-                  <Automatic-Module-Name>org.apache.logging.log4j.core</Automatic-Module-Name>
-                  <Multi-Release>true</Multi-Release>
                 </manifestEntries>
               </archive>
             </configuration>
@@ -393,6 +561,7 @@
             <goals>
               <goal>test-jar</goal>
             </goals>
+            <phase>process-classes</phase>
             <configuration>
               <archive>
                 <manifestFile>${manifestfile}</manifestFile>
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ExtendedStackTraceElement.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ExtendedStackTraceElement.java
index 083f356..c65eaa1 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ExtendedStackTraceElement.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ExtendedStackTraceElement.java
@@ -167,8 +167,13 @@ public final class ExtendedStackTraceElement implements Serializable {
         final String fileName = stElement.getFileName();
         final int lineNumber = stElement.getLineNumber();
         String moduleName = getModuleName();
+        String moduleVersion = getModuleVersion();
         if (Strings.isNotEmpty(moduleName)) {
             textRenderer.render(moduleName, output, "StackTraceElement.ModuleName");
+            if (Strings.isNotEmpty(moduleVersion) && !moduleName.startsWith("java")) {
+                textRenderer.render("@", output, "StackTraceElement.ModuleVersionSeparator");
+                textRenderer.render(moduleVersion, output, "StackTraceElement.ModuleVersion");
+            }
             textRenderer.render("/", output, "StackTraceElement.ModuleNameSeparator");
         }
         textRenderer.render(getClassName(), output, "StackTraceElement.ClassName");
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/junit/package-info.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/plugins/package-info.java
similarity index 85%
rename from log4j-core/src/test/java/org/apache/logging/log4j/core/junit/package-info.java
rename to log4j-core/src/main/java/org/apache/logging/log4j/core/plugins/package-info.java
index cda2595..33dbfd3 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/junit/package-info.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/plugins/package-info.java
@@ -14,9 +14,7 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-
 /**
- * JUnit helper classes and TestRules.
- * @see org.junit.rules.TestRule
+ * Placeholder package. The plugins class will be generated here and needs to be present .
  */
-package org.apache.logging.log4j.core.junit;
+package org.apache.logging.log4j.core.plugins;
diff --git a/log4j-core/src/main/java9/module-info.java b/log4j-core/src/main/java9/module-info.java
new file mode 100644
index 0000000..9133d77
--- /dev/null
+++ b/log4j-core/src/main/java9/module-info.java
@@ -0,0 +1,86 @@
+/*
+ * 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.
+ */
+module org.apache.logging.log4j.core {
+    exports org.apache.logging.log4j.core;
+    exports org.apache.logging.log4j.core.appender;
+    exports org.apache.logging.log4j.core.appender.db;
+    exports org.apache.logging.log4j.core.appender.nosql;
+    exports org.apache.logging.log4j.core.appender.rewrite;
+    exports org.apache.logging.log4j.core.appender.rolling;
+    exports org.apache.logging.log4j.core.appender.rolling.action;
+    exports org.apache.logging.log4j.core.appender.routing;
+    exports org.apache.logging.log4j.core.async;
+    exports org.apache.logging.log4j.core.config;
+    exports org.apache.logging.log4j.core.config.arbiters;
+    exports org.apache.logging.log4j.core.config.builder.api;
+    exports org.apache.logging.log4j.core.config.builder.impl;
+    exports org.apache.logging.log4j.core.config.composite;
+    exports org.apache.logging.log4j.core.config.json;
+    exports org.apache.logging.log4j.core.config.plugins;
+    exports org.apache.logging.log4j.core.config.plugins.convert;
+    exports org.apache.logging.log4j.core.config.plugins.inject;
+    exports org.apache.logging.log4j.core.config.plugins.util;
+    exports org.apache.logging.log4j.core.config.plugins.visitors;
+    exports org.apache.logging.log4j.core.config.properties;
+    exports org.apache.logging.log4j.core.config.status;
+    exports org.apache.logging.log4j.core.config.xml;
+    exports org.apache.logging.log4j.core.config.yaml;
+    exports org.apache.logging.log4j.core.filter;
+    exports org.apache.logging.log4j.core.impl;
+    exports org.apache.logging.log4j.core.jmx;
+    exports org.apache.logging.log4j.core.layout;
+    exports org.apache.logging.log4j.core.lookup;
+    exports org.apache.logging.log4j.core.message;
+    exports org.apache.logging.log4j.core.net;
+    exports org.apache.logging.log4j.core.net.ssl;
+    exports org.apache.logging.log4j.core.osgi;
+    exports org.apache.logging.log4j.core.parser;
+    exports org.apache.logging.log4j.core.pattern;
+    exports org.apache.logging.log4j.core.script;
+    exports org.apache.logging.log4j.core.selector;
+    exports org.apache.logging.log4j.core.time;
+    exports org.apache.logging.log4j.core.tools;
+    exports org.apache.logging.log4j.core.tools.picocli;
+    exports org.apache.logging.log4j.core.util;
+    exports org.apache.logging.log4j.core.util.datetime;
+
+    requires transitive java.desktop;
+    requires transitive java.management;
+    requires transitive java.naming;
+    requires transitive java.sql;
+    requires transitive java.rmi;
+    requires transitive java.scripting;
+    requires transitive java.xml;
+    requires transitive org.apache.logging.log4j;
+    requires transitive org.apache.logging.log4j.plugins;
+    requires transitive com.lmax.disruptor;
+    requires transitive org.jctools.core;
+    requires transitive org.osgi.framework;
+    requires transitive com.conversantmedia.disruptor;
+    requires transitive com.fasterxml.jackson.core;
+    requires transitive com.fasterxml.jackson.databind;
+    requires transitive com.fasterxml.jackson.dataformat.xml;
+    requires transitive com.fasterxml.jackson.dataformat.yaml;
+    requires transitive org.apache.commons.compress;
+    requires transitive org.fusesource.jansi;
+    uses org.apache.logging.log4j.core.util.ContextDataProvider;
+    uses org.apache.logging.log4j.core.util.WatchEventService;
+    provides org.apache.logging.log4j.message.ThreadDumpMessage.ThreadInfoFactory with org.apache.logging.log4j.core.message.ExtendedThreadInfoFactory;
+    provides org.apache.logging.log4j.core.util.ContextDataProvider with org.apache.logging.log4j.core.impl.ThreadContextDataProvider;
+    provides org.apache.logging.log4j.spi.Provider with org.apache.logging.log4j.core.impl.Log4jProvider;
+    provides org.apache.logging.log4j.plugins.processor.PluginService with org.apache.logging.log4j.core.plugins.Log4jPlugins;
+}
diff --git a/log4j-core/src/main/resources/META-INF/MANIFEST.MF b/log4j-core/src/main/resources/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..e69de29
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/test/AvailablePortFinder.java b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/AvailablePortFinder.java
similarity index 99%
rename from log4j-core/src/test/java/org/apache/logging/log4j/test/AvailablePortFinder.java
rename to log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/AvailablePortFinder.java
index 14122c5..9cac7ac 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/test/AvailablePortFinder.java
+++ b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/AvailablePortFinder.java
@@ -14,7 +14,7 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-package org.apache.logging.log4j.test;
+package org.apache.logging.log4j.core.test;
 
 import java.io.IOException;
 import java.net.DatagramSocket;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/test/AvailablePortSystemPropertyTestRule.java b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/AvailablePortSystemPropertyTestRule.java
similarity index 98%
rename from log4j-core/src/test/java/org/apache/logging/log4j/test/AvailablePortSystemPropertyTestRule.java
rename to log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/AvailablePortSystemPropertyTestRule.java
index 1bece7b..d62d180 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/test/AvailablePortSystemPropertyTestRule.java
+++ b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/AvailablePortSystemPropertyTestRule.java
@@ -15,7 +15,7 @@
  * limitations under the license.
  */
 
-package org.apache.logging.log4j.test;
+package org.apache.logging.log4j.core.test;
 
 import org.junit.rules.TestRule;
 import org.junit.runner.Description;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/test/ExtendedLevels.java b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/ExtendedLevels.java
similarity index 96%
rename from log4j-core/src/test/java/org/apache/logging/log4j/test/ExtendedLevels.java
rename to log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/ExtendedLevels.java
index 81a6707..9474809 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/test/ExtendedLevels.java
+++ b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/ExtendedLevels.java
@@ -14,7 +14,7 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-package org.apache.logging.log4j.test;
+package org.apache.logging.log4j.core.test;
 
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.plugins.Plugin;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/test/GetLogger.java b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/GetLogger.java
similarity index 97%
rename from log4j-core/src/test/java/org/apache/logging/log4j/test/GetLogger.java
rename to log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/GetLogger.java
index 13015f2..8fc3d81 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/test/GetLogger.java
+++ b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/GetLogger.java
@@ -14,7 +14,7 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-package org.apache.logging.log4j.test;
+package org.apache.logging.log4j.core.test;
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/test/RuleChainFactory.java b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/RuleChainFactory.java
similarity index 97%
rename from log4j-core/src/test/java/org/apache/logging/log4j/test/RuleChainFactory.java
rename to log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/RuleChainFactory.java
index 30629b2..803872a 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/test/RuleChainFactory.java
+++ b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/RuleChainFactory.java
@@ -15,7 +15,7 @@
  * limitations under the license.
  */
 
-package org.apache.logging.log4j.test;
+package org.apache.logging.log4j.core.test;
 
 import org.junit.rules.RuleChain;
 import org.junit.rules.TestRule;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/TestMarkers.java b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/TestMarkers.java
similarity index 90%
rename from log4j-core/src/test/java/org/apache/logging/log4j/TestMarkers.java
rename to log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/TestMarkers.java
index 29ba32c..d9957bc 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/TestMarkers.java
+++ b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/TestMarkers.java
@@ -15,7 +15,10 @@
  * limitations under the license.
  */
 
-package org.apache.logging.log4j;
+package org.apache.logging.log4j.core.test;
+
+import org.apache.logging.log4j.Marker;
+import org.apache.logging.log4j.MarkerManager;
 
 /**
  * Markers useful in tests.
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/AlwaysFailAppender.java b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/appender/AlwaysFailAppender.java
similarity index 97%
rename from log4j-core/src/test/java/org/apache/logging/log4j/test/appender/AlwaysFailAppender.java
rename to log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/appender/AlwaysFailAppender.java
index 380dfe5..d569486 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/AlwaysFailAppender.java
+++ b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/appender/AlwaysFailAppender.java
@@ -14,7 +14,7 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-package org.apache.logging.log4j.test.appender;
+package org.apache.logging.log4j.core.test.appender;
 
 import org.apache.logging.log4j.LoggingException;
 import org.apache.logging.log4j.core.Appender;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/BlockingAppender.java b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/appender/BlockingAppender.java
similarity index 97%
rename from log4j-core/src/test/java/org/apache/logging/log4j/test/appender/BlockingAppender.java
rename to log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/appender/BlockingAppender.java
index 922f50b..f121e85 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/BlockingAppender.java
+++ b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/appender/BlockingAppender.java
@@ -14,7 +14,7 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-package org.apache.logging.log4j.test.appender;
+package org.apache.logging.log4j.core.test.appender;
 
 import java.util.concurrent.TimeUnit;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/EncodingListAppender.java b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/appender/EncodingListAppender.java
similarity index 95%
rename from log4j-core/src/test/java/org/apache/logging/log4j/test/appender/EncodingListAppender.java
rename to log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/appender/EncodingListAppender.java
index aa76254..4910494 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/EncodingListAppender.java
+++ b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/appender/EncodingListAppender.java
@@ -14,7 +14,7 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-package org.apache.logging.log4j.test.appender;
+package org.apache.logging.log4j.core.test.appender;
 
 import java.io.Serializable;
 import java.nio.ByteBuffer;
@@ -44,7 +44,7 @@ public class EncodingListAppender extends ListAppender {
 
     private static class Destination implements ByteBufferDestination {
         // JUnit 5 stack traces can start to get looooong
-        ByteBuffer byteBuffer = ByteBuffer.wrap(new byte[8192]);
+        ByteBuffer byteBuffer = ByteBuffer.wrap(new byte[8192 * 2]);
 
         @Override
         public ByteBuffer getByteBuffer() {
@@ -53,7 +53,7 @@ public class EncodingListAppender extends ListAppender {
 
         @Override
         public ByteBuffer drain(final ByteBuffer buf) {
-            throw new IllegalStateException("Unexpected message larger than 4096 bytes");
+            throw new IllegalStateException("Unexpected message larger than 16 KB");
         }
 
         @Override
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/FailOnceAppender.java b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/appender/FailOnceAppender.java
similarity index 98%
rename from log4j-core/src/test/java/org/apache/logging/log4j/test/appender/FailOnceAppender.java
rename to log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/appender/FailOnceAppender.java
index 6a8f5f2..3864669 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/FailOnceAppender.java
+++ b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/appender/FailOnceAppender.java
@@ -14,7 +14,7 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-package org.apache.logging.log4j.test.appender;
+package org.apache.logging.log4j.core.test.appender;
 
 import org.apache.logging.log4j.LoggingException;
 import org.apache.logging.log4j.core.Appender;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/appender/InMemoryAppender.java
similarity index 97%
rename from log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java
rename to log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/appender/InMemoryAppender.java
index d67c845..532a6b3 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/InMemoryAppender.java
+++ b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/appender/InMemoryAppender.java
@@ -14,7 +14,7 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-package org.apache.logging.log4j.test.appender;
+package org.apache.logging.log4j.core.test.appender;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/ListAppender.java b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/appender/ListAppender.java
similarity index 98%
rename from log4j-core/src/test/java/org/apache/logging/log4j/test/appender/ListAppender.java
rename to log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/appender/ListAppender.java
index 939e66a..565d41f 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/ListAppender.java
+++ b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/appender/ListAppender.java
@@ -14,7 +14,7 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-package org.apache.logging.log4j.test.appender;
+package org.apache.logging.log4j.core.test.appender;
 
 import org.apache.logging.log4j.core.Appender;
 import org.apache.logging.log4j.core.Core;
@@ -25,7 +25,7 @@ import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.appender.AbstractAppender;
 import org.apache.logging.log4j.core.config.Property;
 import org.apache.logging.log4j.core.impl.MutableLogEvent;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.apache.logging.log4j.plugins.Plugin;
 import org.apache.logging.log4j.plugins.PluginAttribute;
 import org.apache.logging.log4j.plugins.PluginElement;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/hamcrest/Descriptors.java b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/hamcrest/Descriptors.java
similarity index 96%
rename from log4j-core/src/test/java/org/apache/logging/log4j/core/hamcrest/Descriptors.java
rename to log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/hamcrest/Descriptors.java
index f45a6a6..0ddb27e 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/hamcrest/Descriptors.java
+++ b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/hamcrest/Descriptors.java
@@ -14,7 +14,7 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-package org.apache.logging.log4j.core.hamcrest;
+package org.apache.logging.log4j.core.test.hamcrest;
 
 import org.hamcrest.Description;
 import org.hamcrest.Matcher;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/hamcrest/FileMatchers.java b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/hamcrest/FileMatchers.java
similarity index 98%
rename from log4j-core/src/test/java/org/apache/logging/log4j/hamcrest/FileMatchers.java
rename to log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/hamcrest/FileMatchers.java
index 7336e33..5c0be8e 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/hamcrest/FileMatchers.java
+++ b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/hamcrest/FileMatchers.java
@@ -14,7 +14,7 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-package org.apache.logging.log4j.hamcrest;
+package org.apache.logging.log4j.core.test.hamcrest;
 
 import java.io.File;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/hamcrest/MapMatchers.java b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/hamcrest/MapMatchers.java
similarity index 97%
rename from log4j-core/src/test/java/org/apache/logging/log4j/core/hamcrest/MapMatchers.java
rename to log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/hamcrest/MapMatchers.java
index 078214b..0803189 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/hamcrest/MapMatchers.java
+++ b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/hamcrest/MapMatchers.java
@@ -14,7 +14,7 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-package org.apache.logging.log4j.core.hamcrest;
+package org.apache.logging.log4j.core.test.hamcrest;
 
 import java.util.Map;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/junit/AppenderResolver.java b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/AppenderResolver.java
similarity index 94%
rename from log4j-core/src/test/java/org/apache/logging/log4j/core/junit/AppenderResolver.java
rename to log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/AppenderResolver.java
index 88ec29b..a2343fb 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/junit/AppenderResolver.java
+++ b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/AppenderResolver.java
@@ -15,7 +15,7 @@
  * limitations under the license.
  */
 
-package org.apache.logging.log4j.core.junit;
+package org.apache.logging.log4j.core.test.junit;
 
 import org.apache.logging.log4j.core.Appender;
 import org.apache.logging.log4j.core.LoggerContext;
@@ -24,7 +24,7 @@ import org.junit.jupiter.api.extension.ParameterContext;
 import org.junit.jupiter.api.extension.ParameterResolutionException;
 import org.junit.jupiter.api.extension.ParameterResolver;
 
-import static org.apache.logging.log4j.core.junit.LoggerContextResolver.getParameterLoggerContext;
+import static org.apache.logging.log4j.core.test.junit.LoggerContextResolver.getParameterLoggerContext;
 
 class AppenderResolver implements ParameterResolver {
     @Override
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/junit/ConfigurationResolver.java b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/ConfigurationResolver.java
similarity index 88%
rename from log4j-core/src/test/java/org/apache/logging/log4j/junit/ConfigurationResolver.java
rename to log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/ConfigurationResolver.java
index e48b565..274a6d9 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/junit/ConfigurationResolver.java
+++ b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/ConfigurationResolver.java
@@ -15,16 +15,15 @@
  * limitations under the license.
  */
 
-package org.apache.logging.log4j.junit;
+package org.apache.logging.log4j.core.test.junit;
 
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.config.Configuration;
 import org.junit.jupiter.api.extension.ExtensionContext;
 import org.junit.jupiter.api.extension.ParameterContext;
 import org.junit.jupiter.api.extension.ParameterResolutionException;
-import org.junit.jupiter.api.extension.support.TypeBasedParameterResolver;
 
-import static org.apache.logging.log4j.junit.LoggerContextResolver.getParameterLoggerContext;
+import static org.apache.logging.log4j.core.test.junit.LoggerContextResolver.getParameterLoggerContext;
 
 class ConfigurationResolver extends TypeBasedParameterResolver<Configuration> {
     @Override
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/junit/JndiRule.java b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/JndiRule.java
similarity index 97%
rename from log4j-core/src/test/java/org/apache/logging/log4j/core/junit/JndiRule.java
rename to log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/JndiRule.java
index 4ade779..8007ab5 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/junit/JndiRule.java
+++ b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/JndiRule.java
@@ -14,7 +14,7 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-package org.apache.logging.log4j.core.junit;
+package org.apache.logging.log4j.core.test.junit;
 
 import java.util.Collections;
 import java.util.Map;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/junit/LoggerContextResolver.java b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/LoggerContextResolver.java
similarity index 98%
rename from log4j-core/src/test/java/org/apache/logging/log4j/junit/LoggerContextResolver.java
rename to log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/LoggerContextResolver.java
index 3a92d3b..023b84d 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/junit/LoggerContextResolver.java
+++ b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/LoggerContextResolver.java
@@ -15,7 +15,7 @@
  * limitations under the license.
  */
 
-package org.apache.logging.log4j.junit;
+package org.apache.logging.log4j.core.test.junit;
 
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.LoggerContextAccessor;
@@ -27,7 +27,6 @@ import org.junit.jupiter.api.extension.BeforeEachCallback;
 import org.junit.jupiter.api.extension.ExtensionContext;
 import org.junit.jupiter.api.extension.ParameterContext;
 import org.junit.jupiter.api.extension.ParameterResolutionException;
-import org.junit.jupiter.api.extension.support.TypeBasedParameterResolver;
 
 import java.lang.reflect.Method;
 import java.util.concurrent.TimeUnit;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/junit/LoggerContextRule.java b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/LoggerContextRule.java
similarity index 99%
rename from log4j-core/src/test/java/org/apache/logging/log4j/core/junit/LoggerContextRule.java
rename to log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/LoggerContextRule.java
index af422bb..de678e0 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/junit/LoggerContextRule.java
+++ b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/LoggerContextRule.java
@@ -14,7 +14,7 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-package org.apache.logging.log4j.core.junit;
+package org.apache.logging.log4j.core.test.junit;
 
 import java.util.concurrent.TimeUnit;
 
@@ -29,7 +29,7 @@ import org.apache.logging.log4j.core.config.Configurator;
 import org.apache.logging.log4j.core.selector.ContextSelector;
 import org.apache.logging.log4j.core.util.Constants;
 import org.apache.logging.log4j.status.StatusLogger;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.apache.logging.log4j.test.junit.CleanFiles;
 import org.apache.logging.log4j.test.junit.CleanFolders;
 import org.junit.rules.RuleChain;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/junit/LoggerContextSource.java b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/LoggerContextSource.java
similarity index 98%
rename from log4j-core/src/test/java/org/apache/logging/log4j/core/junit/LoggerContextSource.java
rename to log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/LoggerContextSource.java
index a63f0b8..7dfcf18 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/junit/LoggerContextSource.java
+++ b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/LoggerContextSource.java
@@ -15,7 +15,7 @@
  * limitations under the license.
  */
 
-package org.apache.logging.log4j.core.junit;
+package org.apache.logging.log4j.core.test.junit;
 
 import org.apache.logging.log4j.core.Appender;
 import org.apache.logging.log4j.core.LoggerContext;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/junit/Named.java b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/Named.java
similarity index 96%
rename from log4j-core/src/test/java/org/apache/logging/log4j/junit/Named.java
rename to log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/Named.java
index fe776d7..0a8b786 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/junit/Named.java
+++ b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/Named.java
@@ -15,7 +15,7 @@
  * limitations under the license.
  */
 
-package org.apache.logging.log4j.junit;
+package org.apache.logging.log4j.core.test.junit;
 
 import java.lang.annotation.Documented;
 import java.lang.annotation.ElementType;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/junit/ReconfigurationPolicy.java b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/ReconfigurationPolicy.java
similarity index 96%
rename from log4j-core/src/test/java/org/apache/logging/log4j/junit/ReconfigurationPolicy.java
rename to log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/ReconfigurationPolicy.java
index 3b872bd..1c19ac5 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/junit/ReconfigurationPolicy.java
+++ b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/ReconfigurationPolicy.java
@@ -15,7 +15,7 @@
  * limitations under the license.
  */
 
-package org.apache.logging.log4j.junit;
+package org.apache.logging.log4j.core.test.junit;
 
 import org.apache.logging.log4j.core.LoggerContext;
 
diff --git a/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/TypeBasedParameterResolver.java b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/TypeBasedParameterResolver.java
new file mode 100644
index 0000000..e24af48
--- /dev/null
+++ b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/TypeBasedParameterResolver.java
@@ -0,0 +1,80 @@
+/*
+ * 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.
+ */
+package org.apache.logging.log4j.core.test.junit;
+
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.api.extension.ParameterContext;
+import org.junit.jupiter.api.extension.ParameterResolutionException;
+import org.junit.jupiter.api.extension.ParameterResolver;
+
+import static org.junit.jupiter.api.Assertions.fail;
+
+/**
+ * An adapter that resolved a parameter based on its type.
+ */
+public abstract class TypeBasedParameterResolver<T> implements ParameterResolver {
+
+    private final Type parameterType;
+
+    public TypeBasedParameterResolver() {
+        this.parameterType = enclosedTypeOfParameterResolver();
+    }
+
+    @Override
+    public final boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) {
+        return this.parameterType.equals(getParameterType(parameterContext));
+    }
+
+    @Override
+    public abstract T resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext)
+            throws ParameterResolutionException;
+
+    private Type getParameterType(ParameterContext parameterContext) {
+        return parameterContext.getParameter().getParameterizedType();
+    }
+
+    private Type enclosedTypeOfParameterResolver() {
+        ParameterizedType typeBasedParameterResolverSuperclass = findTypeBasedParameterResolverSuperclass(getClass());
+        if (typeBasedParameterResolverSuperclass == null) {
+            String msg = String.format("Failed to discover parameter type supported by %s; "
+                            + "potentially caused by lacking parameterized type in class declaration.",
+                    getClass().getName());
+            fail(msg);
+        }
+        return typeBasedParameterResolverSuperclass.getActualTypeArguments()[0];
+    }
+
+    private ParameterizedType findTypeBasedParameterResolverSuperclass(Class<?> clazz) {
+        Class<?> superclass = clazz.getSuperclass();
+        if (superclass == null || superclass == Object.class) {
+            return null;
+        }
+
+        Type genericSuperclass = clazz.getGenericSuperclass();
+        if (genericSuperclass instanceof ParameterizedType) {
+            Type rawType = ((ParameterizedType) genericSuperclass).getRawType();
+            if (rawType == TypeBasedParameterResolver.class) {
+                return (ParameterizedType) genericSuperclass;
+            }
+        }
+        return findTypeBasedParameterResolverSuperclass(superclass);
+    }
+
+}
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/junit/package-info.java b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/package-info.java
similarity index 94%
rename from log4j-core/src/test/java/org/apache/logging/log4j/junit/package-info.java
rename to log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/package-info.java
index cae1cf7..9baeb0b 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/junit/package-info.java
+++ b/log4j-core/src/test/java-test/org/apache/logging/log4j/core/test/junit/package-info.java
@@ -19,4 +19,4 @@
  * JUnit helper classes and TestRules.
  * @see org.junit.rules.TestRule
  */
-package org.apache.logging.log4j.junit;
+package org.apache.logging.log4j.core.test.junit;
diff --git a/log4j-core/src/test/java-test9/module-info.java b/log4j-core/src/test/java-test9/module-info.java
new file mode 100644
index 0000000..738d1b5
--- /dev/null
+++ b/log4j-core/src/test/java-test9/module-info.java
@@ -0,0 +1,20 @@
+module org.apache.logging.log4j.core.test {
+    exports org.apache.logging.log4j.core.test;
+    exports org.apache.logging.log4j.core.test.appender;
+    exports org.apache.logging.log4j.core.test.hamcrest;
+    exports org.apache.logging.log4j.core.test.junit;
+
+    requires java.naming;
+    requires org.apache.logging.log4j;
+    requires org.apache.logging.log4j.test;
+    requires org.apache.logging.log4j.plugins;
+    requires org.apache.logging.log4j.plugins.test;
+    requires org.apache.logging.log4j.core;
+    requires com.fasterxml.jackson.core;
+    requires com.fasterxml.jackson.databind;
+    requires org.junit.jupiter.api;
+    requires org.junit.jupiter.engine;
+    requires org.junit.jupiter.params;
+    requires org.junit.platform.commons;
+    requires org.junit.platform.engine;
+}
\ No newline at end of file
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/categories/Appenders.java b/log4j-core/src/test/java/org/apache/logging/log4j/categories/Appenders.java
deleted file mode 100644
index ec9c403..0000000
--- a/log4j-core/src/test/java/org/apache/logging/log4j/categories/Appenders.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.
- */
-package org.apache.logging.log4j.categories;
-
-/**
- * Categories for appenders that require extra dependencies.
- */
-public interface Appenders {
-    interface AsyncConversant {}
-    interface AsyncJcTools {}
-    interface Cassandra {}
-    interface CouchDb {}
-    interface Jms {}
-    interface Jpa {}
-    interface Kafka {}
-    interface MongoDb {}
-    interface Smtp {}
-    interface ZeroMq {}
-}
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/categories/Configurations.java b/log4j-core/src/test/java/org/apache/logging/log4j/categories/Configurations.java
deleted file mode 100644
index 3342726..0000000
--- a/log4j-core/src/test/java/org/apache/logging/log4j/categories/Configurations.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * 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.
- */
-package org.apache.logging.log4j.categories;
-
-/**
- * Categories for configuration formats that require extra dependencies.
- */
-public interface Configurations {
-    interface Json {}
-    interface Yaml {}
-}
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/categories/Layouts.java b/log4j-core/src/test/java/org/apache/logging/log4j/categories/Layouts.java
deleted file mode 100644
index 34775d6..0000000
--- a/log4j-core/src/test/java/org/apache/logging/log4j/categories/Layouts.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * 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.
- */
-package org.apache.logging.log4j.categories;
-
-/**
- * Categories for layouts that require extra dependencies.
- */
-public interface Layouts {
-    interface Csv {}
-    interface Jansi {}
-    interface Json {}
-    interface Xml {}
-    interface Yaml {}
-}
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/categories/package-info.java b/log4j-core/src/test/java/org/apache/logging/log4j/categories/package-info.java
deleted file mode 100644
index 82d3474..0000000
--- a/log4j-core/src/test/java/org/apache/logging/log4j/categories/package-info.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * 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 test categories. Unit tests should not specify a category as most tests are unit tests. For performance and
- * integration tests, an appropriate category interface should be specified.
- */
-package org.apache.logging.log4j.categories;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/AppenderRefLevelJsonTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/AppenderRefLevelJsonTest.java
index 82d9370..2d3157f 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/AppenderRefLevelJsonTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/AppenderRefLevelJsonTest.java
@@ -18,9 +18,9 @@ package org.apache.logging.log4j.core;
 
 import org.apache.logging.log4j.Marker;
 import org.apache.logging.log4j.MarkerManager;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/AppenderRefLevelTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/AppenderRefLevelTest.java
index bc40848..022ce48 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/AppenderRefLevelTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/AppenderRefLevelTest.java
@@ -20,9 +20,9 @@ import java.util.List;
 
 import org.apache.logging.log4j.Marker;
 import org.apache.logging.log4j.MarkerManager;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.*;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/CollectionLoggingTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/CollectionLoggingTest.java
index e892312..8a14a29 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/CollectionLoggingTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/CollectionLoggingTest.java
@@ -17,10 +17,10 @@
 package org.apache.logging.log4j.core;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
 import org.apache.logging.log4j.message.StringMapMessage;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.parallel.ResourceAccessMode;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/CustomLevelsOverrideTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/CustomLevelsOverrideTest.java
index 20826dd..f2007d1 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/CustomLevelsOverrideTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/CustomLevelsOverrideTest.java
@@ -21,9 +21,9 @@ import static org.hamcrest.Matchers.hasSize;
 import static org.junit.jupiter.api.Assertions.*;
 
 import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Test;
 
 @LoggerContextSource("log4j-customLevels.xml")
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/CustomLevelsTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/CustomLevelsTest.java
index 0512ba5..b4da830 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/CustomLevelsTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/CustomLevelsTest.java
@@ -21,9 +21,9 @@ import static org.hamcrest.Matchers.hasSize;
 import static org.junit.jupiter.api.Assertions.*;
 
 import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Test;
 
 @LoggerContextSource("log4j-customLevels.xml")
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/CustomLevelsWithFiltersTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/CustomLevelsWithFiltersTest.java
index 6df5f06..da1efc6 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/CustomLevelsWithFiltersTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/CustomLevelsWithFiltersTest.java
@@ -21,8 +21,8 @@ import org.apache.logging.log4j.core.appender.FileAppender;
 import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.filter.CompositeFilter;
 import org.apache.logging.log4j.core.filter.ThresholdFilter;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/DeadlockTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/DeadlockTest.java
index 7738058..ff23f05 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/DeadlockTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/DeadlockTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.logging.log4j.core;
 
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/ExtendedLevelTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/ExtendedLevelTest.java
index 6401015..b6b497d 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/ExtendedLevelTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/ExtendedLevelTest.java
@@ -17,10 +17,10 @@
 package org.apache.logging.log4j.core;
 
 import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.test.ExtendedLevels;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.ExtendedLevels;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Test;
 
 import java.util.List;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/FormatterLoggerManualExample.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/FormatterLoggerManualExample.java
similarity index 94%
rename from log4j-core/src/test/java/org/apache/logging/log4j/FormatterLoggerManualExample.java
rename to log4j-core/src/test/java/org/apache/logging/log4j/core/FormatterLoggerManualExample.java
index d5a1438..63cd0c7 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/FormatterLoggerManualExample.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/FormatterLoggerManualExample.java
@@ -14,12 +14,13 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-package org.apache.logging.log4j;
+package org.apache.logging.log4j.core;
 
 import java.util.Calendar;
 import java.util.GregorianCalendar;
 
-import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.config.Configurator;
 
 public class FormatterLoggerManualExample {
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/HostNameTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/HostNameTest.java
index c51df79..256a0ad 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/HostNameTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/HostNameTest.java
@@ -20,9 +20,9 @@ import java.util.List;
 
 import org.apache.logging.log4j.core.appender.RollingFileAppender;
 import org.apache.logging.log4j.core.util.NetUtils;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.jupiter.api.Test;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/LevelTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/LevelTest.java
index c60c904..c177c43 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/LevelTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/LevelTest.java
@@ -22,11 +22,11 @@ import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.Marker;
 import org.apache.logging.log4j.MarkerManager;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.message.ObjectMessage;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.MatcherAssert.*;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/LogEventFactoryTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/LogEventFactoryTest.java
index c728e75..3a6c93d 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/LogEventFactoryTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/LogEventFactoryTest.java
@@ -31,9 +31,9 @@ import org.apache.logging.log4j.core.impl.DefaultLogEventFactory;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.core.impl.LogEventFactory;
 import org.apache.logging.log4j.core.util.Constants;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.apache.logging.log4j.message.Message;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/LogRolloverTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/LogRolloverTest.java
similarity index 92%
rename from log4j-core/src/test/java/org/apache/logging/log4j/LogRolloverTest.java
rename to log4j-core/src/test/java/org/apache/logging/log4j/core/LogRolloverTest.java
index f1739dd..f91c0e5 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/LogRolloverTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/LogRolloverTest.java
@@ -14,11 +14,12 @@
 * See the license for the specific language governing permissions and
 * limitations under the license.
 */
-package org.apache.logging.log4j;
+package org.apache.logging.log4j.core;
 
 import java.io.File;
 
-import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.config.Configurator;
 
 /**
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/LogbackSubstitution.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/LogbackSubstitution.java
similarity index 83%
rename from log4j-core/src/test/java/org/apache/logging/log4j/LogbackSubstitution.java
rename to log4j-core/src/test/java/org/apache/logging/log4j/core/LogbackSubstitution.java
index 4f46efd..570340d 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/LogbackSubstitution.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/LogbackSubstitution.java
@@ -14,13 +14,12 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-package org.apache.logging.log4j;
+package org.apache.logging.log4j.core;
 
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.slf4j.ext.XLogger;
-import org.slf4j.ext.XLoggerFactory;
+import org.slf4j.LoggerFactory;
 
 /**
  *
@@ -29,7 +28,7 @@ public class LogbackSubstitution {
 
     private static final String LOGBACK_CONF = "logback.configurationFile";
     private static final String LOGBACK_CONFIG = "logback-subst.xml";
-    private final XLogger xLogger = XLoggerFactory.getXLogger(LogbackSubstitution.class);
+    private final org.slf4j.Logger logger = LoggerFactory.getLogger(LogbackSubstitution.class);
 
 
 
@@ -45,7 +44,7 @@ public class LogbackSubstitution {
 
     @Test
     public void testSubst() {
-        xLogger.debug("Hello, {}", "Log4j {}");
-        xLogger.debug("Hello, {}");
+        logger.debug("Hello, {}", "Log4j {}");
+        logger.debug("Hello, {}");
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/LoggerDateTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/LoggerDateTest.java
index 4763d10..6d8229e 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/LoggerDateTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/LoggerDateTest.java
@@ -19,8 +19,8 @@ package org.apache.logging.log4j.core;
 import java.util.Calendar;
 
 import org.apache.logging.log4j.core.appender.FileAppender;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.*;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/LoggerTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/LoggerTest.java
index 1b23796..d21513a 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/LoggerTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/LoggerTest.java
@@ -24,9 +24,9 @@ import org.apache.logging.log4j.ThreadContext;
 import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.config.Configurator;
 import org.apache.logging.log4j.core.config.LoggerConfig;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.core.junit.ReconfigurationPolicy;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.junit.ReconfigurationPolicy;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.message.MessageFactory;
 import org.apache.logging.log4j.message.ParameterizedMessageFactory;
@@ -34,7 +34,7 @@ import org.apache.logging.log4j.message.SimpleMessage;
 import org.apache.logging.log4j.message.StringFormatterMessageFactory;
 import org.apache.logging.log4j.message.StructuredDataMessage;
 import org.apache.logging.log4j.spi.AbstractLogger;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.hamcrest.MatcherAssert;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.TestInfo;
@@ -84,7 +84,7 @@ public class LoggerTest {
         final List<LogEvent> events = app.getEvents();
         assertEventCount(events, 3);
         assertEquals(
-                "org.apache.logging.log4j.core.LoggerTest.builder(LoggerTest.java:80)", events.get(0).getSource().toString(),
+                "org.apache.logging.log4j.core/org.apache.logging.log4j.core.LoggerTest.builder(LoggerTest.java:80)", events.get(0).getSource().toString(),
                 "Incorrect location");
         assertEquals(Level.DEBUG, events.get(0).getLevel(), "Incorrect Level");
         MatcherAssert.assertThat("Incorrect message", events.get(1).getMessage().getFormattedMessage(), equalTo("Hello John"));
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/LoggerUpdateTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/LoggerUpdateTest.java
index a595186..ecba58f 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/LoggerUpdateTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/LoggerUpdateTest.java
@@ -20,9 +20,9 @@ import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.config.LoggerConfig;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Test;
 
 import java.util.List;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/LookupTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/LookupTest.java
index 801b8ff..fc4ba9f 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/LookupTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/LookupTest.java
@@ -18,8 +18,8 @@ package org.apache.logging.log4j.core;
 
 import org.apache.logging.log4j.core.appender.ConsoleAppender;
 import org.apache.logging.log4j.core.layout.PatternLayout;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.*;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/PatternSelectorTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/PatternSelectorTest.java
index 4806e6a..6721ce0 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/PatternSelectorTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/PatternSelectorTest.java
@@ -19,9 +19,9 @@ package org.apache.logging.log4j.core;
 import java.util.List;
 
 import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.jupiter.api.Test;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/PropertiesFileConfigTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/PropertiesFileConfigTest.java
index 0914758..6294d88 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/PropertiesFileConfigTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/PropertiesFileConfigTest.java
@@ -17,9 +17,9 @@
 package org.apache.logging.log4j.core;
 
 import org.apache.logging.log4j.core.config.Configuration;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/ShutdownDisabledTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/ShutdownDisabledTest.java
index 0771742..aa553a4 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/ShutdownDisabledTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/ShutdownDisabledTest.java
@@ -17,7 +17,7 @@
 package org.apache.logging.log4j.core;
 
 import org.apache.logging.log4j.core.config.Configuration;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertFalse;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/ShutdownTimeoutConfigurationTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/ShutdownTimeoutConfigurationTest.java
index 2037a99..e97a666 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/ShutdownTimeoutConfigurationTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/ShutdownTimeoutConfigurationTest.java
@@ -17,7 +17,7 @@
 package org.apache.logging.log4j.core;
 
 import org.apache.logging.log4j.core.config.Configuration;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.*;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/StrictXmlConfigTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/StrictXmlConfigTest.java
index 29293f7..d764340 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/StrictXmlConfigTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/StrictXmlConfigTest.java
@@ -18,11 +18,11 @@ package org.apache.logging.log4j.core;
 
 import org.apache.logging.log4j.MarkerManager;
 import org.apache.logging.log4j.ThreadContext;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.apache.logging.log4j.message.EntryMessage;
 import org.apache.logging.log4j.message.StructuredDataMessage;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Test;
 
 import java.util.Date;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/ThreadContextTestAccess.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/ThreadContextTestAccess.java
similarity index 97%
rename from log4j-core/src/test/java/org/apache/logging/log4j/ThreadContextTestAccess.java
rename to log4j-core/src/test/java/org/apache/logging/log4j/core/ThreadContextTestAccess.java
index 5245899..fc35ae5 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/ThreadContextTestAccess.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/ThreadContextTestAccess.java
@@ -14,7 +14,7 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-package org.apache.logging.log4j;
+package org.apache.logging.log4j.core;
 
 import java.lang.reflect.Method;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/TimestampMessageTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/TimestampMessageTest.java
index 1131464..ccfee32 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/TimestampMessageTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/TimestampMessageTest.java
@@ -21,12 +21,12 @@ import org.apache.logging.log4j.core.time.Clock;
 import org.apache.logging.log4j.core.time.ClockFactory;
 import org.apache.logging.log4j.core.time.ClockFactoryTest;
 import org.apache.logging.log4j.core.util.Constants;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.message.SimpleMessage;
 import org.apache.logging.log4j.message.TimestampMessage;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/XmlEvents.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/XmlEvents.java
index 9ae8f21..6417953 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/XmlEvents.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/XmlEvents.java
@@ -18,7 +18,7 @@ package org.apache.logging.log4j.core;
 
 import org.apache.logging.log4j.EventLogger;
 import org.apache.logging.log4j.ThreadContext;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.apache.logging.log4j.message.AsynchronouslyFormattable;
 import org.apache.logging.log4j.message.StructuredDataMessage;
 import org.junit.jupiter.api.Disabled;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderQueueFullPolicyTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderQueueFullPolicyTest.java
index c1616c6..95ffd5a 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderQueueFullPolicyTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderQueueFullPolicyTest.java
@@ -21,9 +21,9 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.async.DefaultAsyncQueueFullPolicy;
 import org.apache.logging.log4j.core.async.EventRoute;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.test.appender.BlockingAppender;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.appender.BlockingAppender;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Test;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java
index ad4efed..fad0cb7 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java
@@ -19,10 +19,10 @@ package org.apache.logging.log4j.core.appender;
 
 import org.apache.logging.log4j.LoggingException;
 import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
 import org.apache.logging.log4j.spi.ExtendedLogger;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Timeout;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FailoverAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FailoverAppenderTest.java
index 8239342..499832a 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FailoverAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FailoverAppenderTest.java
@@ -19,10 +19,10 @@ package org.apache.logging.log4j.core.appender;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.test.appender.FailOnceAppender;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.appender.FailOnceAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Test;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderPermissionsTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderPermissionsTest.java
index e12673c..2c32438 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderPermissionsTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderPermissionsTest.java
@@ -25,7 +25,7 @@ import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.core.layout.PatternLayout;
 import org.apache.logging.log4j.core.util.FileUtils;
 import org.apache.logging.log4j.test.junit.CleanUpDirectories;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.apache.logging.log4j.message.SimpleMessage;
 import org.apache.logging.log4j.spi.ExtendedLogger;
 import org.junit.jupiter.api.BeforeAll;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/InMemoryAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/InMemoryAppenderTest.java
index a6004e1..cf386e3 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/InMemoryAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/InMemoryAppenderTest.java
@@ -22,7 +22,7 @@ import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.core.layout.PatternLayout;
 import org.apache.logging.log4j.message.SimpleMessage;
-import org.apache.logging.log4j.test.appender.InMemoryAppender;
+import org.apache.logging.log4j.core.test.appender.InMemoryAppender;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.jupiter.api.Test;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/MemoryMappedFileAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/MemoryMappedFileAppenderTest.java
index 69d24c2..c2b245f 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/MemoryMappedFileAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/MemoryMappedFileAppenderTest.java
@@ -20,7 +20,7 @@ import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.util.Integers;
 import org.apache.logging.log4j.test.junit.CleanUpFiles;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.junit.jupiter.api.Test;
 
 import java.nio.file.Files;
@@ -109,12 +109,11 @@ public class MemoryMappedFileAppenderTest {
         } finally {
             context.stop();
         }
-        assertEquals(272 + 2 * System.lineSeparator().length(), Files.size(logFile), "Expected file size to shrink");
+        assertEquals(332 + 2 * System.lineSeparator().length(), Files.size(logFile), "Expected file size to shrink");
 
         final List<String> lines = Files.readAllLines(logFile);
-        assertThat(lines, both(hasSize(2)).and(contains(
-                "org.apache.logging.log4j.core.appender.MemoryMappedFileAppenderTest.testMemMapLocation(MemoryMappedFileAppenderTest.java:104): Test log1",
-                "org.apache.logging.log4j.core.appender.MemoryMappedFileAppenderTest.testMemMapLocation(MemoryMappedFileAppenderTest.java:107): Test log2"
-        )));
+        assertEquals(2, lines.size());
+        assertTrue(lines.get(0).endsWith("org.apache.logging.log4j.core.appender.MemoryMappedFileAppenderTest.testMemMapLocation(MemoryMappedFileAppenderTest.java:104): Test log1"));
+        assertTrue(lines.get(1).endsWith("org.apache.logging.log4j.core.appender.MemoryMappedFileAppenderTest.testMemMapLocation(MemoryMappedFileAppenderTest.java:107): Test log2"));
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamManagerTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamManagerTest.java
index 0cf8559..5fde3c0 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamManagerTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamManagerTest.java
@@ -24,7 +24,7 @@ import java.util.List;
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.apache.logging.log4j.status.StatusData;
 import org.apache.logging.log4j.status.StatusLogger;
 import org.junit.jupiter.api.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileAppenderTest.java
index 69adad7..25bc0ca 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileAppenderTest.java
@@ -24,7 +24,7 @@ import java.util.Collection;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.test.junit.CleanFiles;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.hamcrest.Matcher;
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ScriptAppenderSelectorTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ScriptAppenderSelectorTest.java
index 3959594..c6474f9 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ScriptAppenderSelectorTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ScriptAppenderSelectorTest.java
@@ -18,9 +18,9 @@ package org.apache.logging.log4j.core.appender;
 
 import org.apache.logging.log4j.MarkerManager;
 import org.apache.logging.log4j.core.config.Configuration;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.apache.logging.log4j.spi.ExtendedLogger;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.MatcherAssert.assertThat;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicyTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicyTest.java
index 7c4e65c..dae1eb9 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicyTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicyTest.java
@@ -35,7 +35,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
 
-import static org.apache.logging.log4j.core.hamcrest.MapMatchers.hasSize;
+import static org.apache.logging.log4j.core.test.hamcrest.MapMatchers.hasSize;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.hasEntry;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/RewriteAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/RewriteAppenderTest.java
index 2eea61d..deabcfb 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/RewriteAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/RewriteAppenderTest.java
@@ -20,12 +20,12 @@ import org.apache.logging.log4j.EventLogger;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.hamcrest.MapMatchers;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
+import org.apache.logging.log4j.core.test.hamcrest.MapMatchers;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.message.StructuredDataMessage;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Test;
 
 import java.util.List;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RandomRollingAppenderOnStartupTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RandomRollingAppenderOnStartupTest.java
index 9b67454..472316c 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RandomRollingAppenderOnStartupTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RandomRollingAppenderOnStartupTest.java
@@ -23,7 +23,7 @@ import java.nio.file.Paths;
 import java.util.Arrays;
 import java.util.Collection;
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCountTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCountTest.java
index 264f3aa..afc381d 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCountTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCountTest.java
@@ -18,7 +18,7 @@ package org.apache.logging.log4j.core.appender.rolling;
 
 import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCronAndSizeTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCronAndSizeTest.java
index b7c7820..06763b5 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCronAndSizeTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCronAndSizeTest.java
@@ -21,14 +21,14 @@ import java.util.Arrays;
 import java.util.Random;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.RuleChain;
 
-import static org.apache.logging.log4j.core.hamcrest.Descriptors.that;
-import static org.apache.logging.log4j.core.hamcrest.FileMatchers.hasName;
+import static org.apache.logging.log4j.core.test.hamcrest.Descriptors.that;
+import static org.apache.logging.log4j.core.test.hamcrest.FileMatchers.hasName;
 import static org.hamcrest.Matchers.endsWith;
 import static org.hamcrest.Matchers.hasItemInArray;
 import static org.junit.Assert.assertEquals;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCronEvery2DirectTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCronEvery2DirectTest.java
index e241d37..b5cf961 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCronEvery2DirectTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCronEvery2DirectTest.java
@@ -21,13 +21,13 @@ import java.security.SecureRandom;
 import java.util.Random;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.hamcrest.Matcher;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.RuleChain;
-import static org.apache.logging.log4j.core.hamcrest.Descriptors.that;
-import static org.apache.logging.log4j.core.hamcrest.FileMatchers.hasName;
+import static org.apache.logging.log4j.core.test.hamcrest.Descriptors.that;
+import static org.apache.logging.log4j.core.test.hamcrest.FileMatchers.hasName;
 import static org.hamcrest.Matchers.endsWith;
 import static org.hamcrest.Matchers.hasItemInArray;
 import static org.junit.Assert.assertTrue;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCronEvery2Test.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCronEvery2Test.java
index 6bf40c9..985c65d 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCronEvery2Test.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCronEvery2Test.java
@@ -21,13 +21,13 @@ import java.security.SecureRandom;
 import java.util.Random;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.hamcrest.Matcher;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.RuleChain;
-import static org.apache.logging.log4j.core.hamcrest.Descriptors.that;
-import static org.apache.logging.log4j.core.hamcrest.FileMatchers.hasName;
+import static org.apache.logging.log4j.core.test.hamcrest.Descriptors.that;
+import static org.apache.logging.log4j.core.test.hamcrest.FileMatchers.hasName;
 import static org.hamcrest.Matchers.endsWith;
 import static org.hamcrest.Matchers.hasItemInArray;
 import static org.junit.Assert.*;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCronOnceADayTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCronOnceADayTest.java
index 6b6f16e..b05b093 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCronOnceADayTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCronOnceADayTest.java
@@ -16,8 +16,8 @@
  */
 package org.apache.logging.log4j.core.appender.rolling;
 
-import static org.apache.logging.log4j.core.hamcrest.Descriptors.that;
-import static org.apache.logging.log4j.core.hamcrest.FileMatchers.hasName;
+import static org.apache.logging.log4j.core.test.hamcrest.Descriptors.that;
+import static org.apache.logging.log4j.core.test.hamcrest.FileMatchers.hasName;
 import static org.hamcrest.Matchers.endsWith;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotEquals;
@@ -33,7 +33,7 @@ import java.util.Calendar;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.appender.RollingFileAppender;
 import org.apache.logging.log4j.core.util.CronExpression;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.apache.logging.log4j.status.StatusLogger;
 import org.hamcrest.Matcher;
 import org.junit.BeforeClass;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCronTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCronTest.java
index 35cda82..447e6e4 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCronTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCronTest.java
@@ -16,8 +16,8 @@
  */
 package org.apache.logging.log4j.core.appender.rolling;
 
-import static org.apache.logging.log4j.core.hamcrest.Descriptors.that;
-import static org.apache.logging.log4j.core.hamcrest.FileMatchers.hasName;
+import static org.apache.logging.log4j.core.test.hamcrest.Descriptors.that;
+import static org.apache.logging.log4j.core.test.hamcrest.FileMatchers.hasName;
 import static org.hamcrest.Matchers.endsWith;
 import static org.hamcrest.Matchers.hasItemInArray;
 import static org.junit.Assert.assertNotNull;
@@ -34,7 +34,7 @@ import java.nio.file.Path;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.appender.RollingFileAppender;
 import org.apache.logging.log4j.core.util.CronExpression;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.hamcrest.Matcher;
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCustomDeleteActionTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCustomDeleteActionTest.java
index d2c4c72..9050704 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCustomDeleteActionTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCustomDeleteActionTest.java
@@ -24,7 +24,7 @@ import java.util.Arrays;
 import java.util.regex.Pattern;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.RuleChain;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteAccumulatedCount1Test.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteAccumulatedCount1Test.java
index 8f85263..efe0bd8 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteAccumulatedCount1Test.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteAccumulatedCount1Test.java
@@ -34,7 +34,7 @@ import java.util.List;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.time.internal.format.FixedDateFormat;
 import org.apache.logging.log4j.core.time.internal.format.FixedDateFormat.FixedFormat;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.RuleChain;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteAccumulatedCount2Test.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteAccumulatedCount2Test.java
index 4231619..bee2cf2 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteAccumulatedCount2Test.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteAccumulatedCount2Test.java
@@ -34,7 +34,7 @@ import java.util.List;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.time.internal.format.FixedDateFormat;
 import org.apache.logging.log4j.core.time.internal.format.FixedDateFormat.FixedFormat;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.RuleChain;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteAccumulatedSizeTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteAccumulatedSizeTest.java
index fb5e5b9..6190e65 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteAccumulatedSizeTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteAccumulatedSizeTest.java
@@ -25,7 +25,7 @@ import java.util.Arrays;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.time.internal.format.FixedDateFormat;
 import org.apache.logging.log4j.core.time.internal.format.FixedDateFormat.FixedFormat;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.RuleChain;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteMaxDepthTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteMaxDepthTest.java
index e414953..a365741 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteMaxDepthTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteMaxDepthTest.java
@@ -31,7 +31,7 @@ import java.util.List;
 import java.util.regex.Pattern;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.RuleChain;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteNestedTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteNestedTest.java
index 6cb2abd..d71a182 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteNestedTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteNestedTest.java
@@ -34,7 +34,7 @@ import java.util.List;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.time.internal.format.FixedDateFormat;
 import org.apache.logging.log4j.core.time.internal.format.FixedDateFormat.FixedFormat;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.RuleChain;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteScriptFri13thTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteScriptFri13thTest.java
index a4df290..f192b4d 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteScriptFri13thTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteScriptFri13thTest.java
@@ -23,7 +23,7 @@ import static org.junit.Assert.assertTrue;
 import java.io.File;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.RuleChain;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteScriptTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteScriptTest.java
index fee0ba3..0b7201a 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteScriptTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDeleteScriptTest.java
@@ -21,7 +21,7 @@ import static org.junit.Assert.assertTrue;
 import java.io.File;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.RuleChain;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWrite1906Test.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWrite1906Test.java
index 0c06172..b80d823 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWrite1906Test.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWrite1906Test.java
@@ -24,7 +24,7 @@ import java.util.List;
 
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.apache.logging.log4j.status.StatusData;
 import org.apache.logging.log4j.status.StatusListener;
 import org.apache.logging.log4j.status.StatusLogger;
@@ -34,8 +34,8 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.RuleChain;
 
-import static org.apache.logging.log4j.core.hamcrest.Descriptors.that;
-import static org.apache.logging.log4j.core.hamcrest.FileMatchers.hasName;
+import static org.apache.logging.log4j.core.test.hamcrest.Descriptors.that;
+import static org.apache.logging.log4j.core.test.hamcrest.FileMatchers.hasName;
 import static org.hamcrest.Matchers.endsWith;
 import static org.hamcrest.Matchers.hasItemInArray;
 import static org.junit.Assert.assertNotNull;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteStartupSizeTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteStartupSizeTest.java
index 3223e9d..d93468c 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteStartupSizeTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteStartupSizeTest.java
@@ -21,7 +21,7 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 import org.apache.logging.log4j.core.appender.RollingFileAppender;
 import org.apache.logging.log4j.test.junit.CleanFolders;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.Rule;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteTempCompressedFilePatternTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteTempCompressedFilePatternTest.java
index 2945d2f..e95b390 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteTempCompressedFilePatternTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteTempCompressedFilePatternTest.java
@@ -16,8 +16,8 @@
  */
 package org.apache.logging.log4j.core.appender.rolling;
 
-import static org.apache.logging.log4j.core.hamcrest.Descriptors.that;
-import static org.apache.logging.log4j.core.hamcrest.FileMatchers.hasName;
+import static org.apache.logging.log4j.core.test.hamcrest.Descriptors.that;
+import static org.apache.logging.log4j.core.test.hamcrest.FileMatchers.hasName;
 import static org.hamcrest.Matchers.endsWith;
 import static org.hamcrest.Matchers.hasItemInArray;
 import static org.junit.Assert.assertNotNull;
@@ -34,7 +34,7 @@ import java.nio.file.WatchService;
 
 import org.apache.commons.lang3.SystemUtils;
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Assume;
 import org.junit.Before;
 import org.junit.Rule;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteTest.java
index a829fbd..bd10354 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteTest.java
@@ -24,13 +24,13 @@ import java.io.InputStreamReader;
 import java.util.zip.GZIPInputStream;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.RuleChain;
-import static org.apache.logging.log4j.core.hamcrest.Descriptors.that;
-import static org.apache.logging.log4j.core.hamcrest.FileMatchers.hasName;
+import static org.apache.logging.log4j.core.test.hamcrest.Descriptors.that;
+import static org.apache.logging.log4j.core.test.hamcrest.FileMatchers.hasName;
 import static org.hamcrest.Matchers.endsWith;
 import static org.hamcrest.Matchers.hasItemInArray;
 import static org.junit.Assert.*;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteWithFilenameTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteWithFilenameTest.java
index 7bc308e..fe44348 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteWithFilenameTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteWithFilenameTest.java
@@ -19,7 +19,7 @@ package org.apache.logging.log4j.core.appender.rolling;
 import java.io.File;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteWithHtmlLayoutTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteWithHtmlLayoutTest.java
index d65de65..b7d811e 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteWithHtmlLayoutTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteWithHtmlLayoutTest.java
@@ -21,7 +21,7 @@ import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.core.layout.HtmlLayout;
 import org.apache.logging.log4j.core.util.IOUtils;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.apache.logging.log4j.message.SimpleMessage;
 import org.hamcrest.Matchers;
 import org.junit.Rule;
@@ -32,8 +32,8 @@ import java.io.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import static org.apache.logging.log4j.core.hamcrest.Descriptors.that;
-import static org.apache.logging.log4j.core.hamcrest.FileMatchers.hasName;
+import static org.apache.logging.log4j.core.test.hamcrest.Descriptors.that;
+import static org.apache.logging.log4j.core.test.hamcrest.FileMatchers.hasName;
 import static org.hamcrest.Matchers.endsWith;
 import static org.hamcrest.Matchers.hasItemInArray;
 import static org.junit.Assert.*;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteWithReconfigureTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteWithReconfigureTest.java
index ce5f003..80e3c65 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteWithReconfigureTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteWithReconfigureTest.java
@@ -21,7 +21,7 @@ import java.net.URI;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.config.Configuration;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderNoUnconditionalDeleteTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderNoUnconditionalDeleteTest.java
index 57df32c..68ac09d 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderNoUnconditionalDeleteTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderNoUnconditionalDeleteTest.java
@@ -24,7 +24,7 @@ import java.util.Collection;
 import java.util.List;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderReconfigureTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderReconfigureTest.java
index 5f1a0fe..dfe8bba 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderReconfigureTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderReconfigureTest.java
@@ -14,8 +14,8 @@
  */
 package org.apache.logging.log4j.core.appender.rolling;
 
-import static org.apache.logging.log4j.core.hamcrest.Descriptors.that;
-import static org.apache.logging.log4j.core.hamcrest.FileMatchers.hasName;
+import static org.apache.logging.log4j.core.test.hamcrest.Descriptors.that;
+import static org.apache.logging.log4j.core.test.hamcrest.FileMatchers.hasName;
 import static org.hamcrest.Matchers.endsWith;
 import static org.hamcrest.Matchers.hasItemInArray;
 import static org.junit.Assert.assertThat;
@@ -25,7 +25,7 @@ import java.io.File;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderRestartTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderRestartTest.java
index 2230232..f968308 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderRestartTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderRestartTest.java
@@ -19,7 +19,7 @@ package org.apache.logging.log4j.core.appender.rolling;
 import org.apache.commons.io.file.PathUtils;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.appender.RollingFileAppender;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.hamcrest.Matcher;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
@@ -41,8 +41,8 @@ import java.util.Arrays;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
-import static org.apache.logging.log4j.core.hamcrest.Descriptors.that;
-import static org.apache.logging.log4j.core.hamcrest.FileMatchers.hasName;
+import static org.apache.logging.log4j.core.test.hamcrest.Descriptors.that;
+import static org.apache.logging.log4j.core.test.hamcrest.FileMatchers.hasName;
 import static org.hamcrest.Matchers.endsWith;
 import static org.hamcrest.Matchers.hasItemInArray;
 import static org.junit.Assert.assertNotNull;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeCompressPermissionsTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeCompressPermissionsTest.java
index 8161f11..a41fbb4 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeCompressPermissionsTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeCompressPermissionsTest.java
@@ -25,7 +25,7 @@ import java.util.concurrent.TimeUnit;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.util.FileUtils;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Assume;
 import org.junit.Before;
 import org.junit.BeforeClass;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeNoCompressTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeNoCompressTest.java
index ba94f32..6eeb25e 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeNoCompressTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeNoCompressTest.java
@@ -30,7 +30,7 @@ import java.util.concurrent.TimeUnit;
 
 import org.apache.commons.compress.utils.IOUtils;
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeTest.java
index 3dba35a..aacb682 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeTest.java
@@ -16,8 +16,8 @@
  */
 package org.apache.logging.log4j.core.appender.rolling;
 
-import static org.apache.logging.log4j.core.hamcrest.Descriptors.that;
-import static org.apache.logging.log4j.core.hamcrest.FileMatchers.hasName;
+import static org.apache.logging.log4j.core.test.hamcrest.Descriptors.that;
+import static org.apache.logging.log4j.core.test.hamcrest.FileMatchers.hasName;
 import static org.hamcrest.Matchers.endsWith;
 import static org.hamcrest.Matchers.hasItemInArray;
 import static org.junit.Assert.assertNotNull;
@@ -43,7 +43,7 @@ import org.apache.commons.compress.utils.IOUtils;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.appender.RollingFileAppender;
 import org.apache.logging.log4j.core.util.Closer;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Rule;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeWithTimeTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeWithTimeTest.java
index 639ba89..f4ed39d 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeWithTimeTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeWithTimeTest.java
@@ -26,7 +26,7 @@ import java.util.concurrent.TimeUnit;
 
 import org.apache.commons.compress.utils.IOUtils;
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderTempCompressedFilePatternTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderTempCompressedFilePatternTest.java
index 77ebf43..2767a12 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderTempCompressedFilePatternTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderTempCompressedFilePatternTest.java
@@ -41,7 +41,7 @@ import org.apache.commons.compress.utils.IOUtils;
 import org.apache.commons.lang3.SystemUtils;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.util.Closer;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Assume;
 import org.junit.Before;
 import org.junit.Rule;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderTimeAndSizeDirectTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderTimeAndSizeDirectTest.java
index 7cdbc30..90c6d0b 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderTimeAndSizeDirectTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderTimeAndSizeDirectTest.java
@@ -19,13 +19,13 @@ package org.apache.logging.log4j.core.appender.rolling;
 import java.io.File;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.RuleChain;
-import static org.apache.logging.log4j.core.hamcrest.Descriptors.that;
-import static org.apache.logging.log4j.core.hamcrest.FileMatchers.hasName;
+import static org.apache.logging.log4j.core.test.hamcrest.Descriptors.that;
+import static org.apache.logging.log4j.core.test.hamcrest.FileMatchers.hasName;
 import static org.hamcrest.Matchers.endsWith;
 import static org.hamcrest.Matchers.hasItemInArray;
 import static org.junit.Assert.*;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderTimeAndSizeTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderTimeAndSizeTest.java
index f947774..a136efd 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderTimeAndSizeTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderTimeAndSizeTest.java
@@ -17,7 +17,7 @@
 package org.apache.logging.log4j.core.appender.rolling;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -29,8 +29,8 @@ import java.nio.file.attribute.FileTime;
 import java.util.Arrays;
 import java.util.Random;
 
-import static org.apache.logging.log4j.core.hamcrest.Descriptors.that;
-import static org.apache.logging.log4j.core.hamcrest.FileMatchers.hasName;
+import static org.apache.logging.log4j.core.test.hamcrest.Descriptors.that;
+import static org.apache.logging.log4j.core.test.hamcrest.FileMatchers.hasName;
 import static org.hamcrest.Matchers.endsWith;
 import static org.hamcrest.Matchers.hasItemInArray;
 import static org.junit.Assert.*;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderTimeTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderTimeTest.java
index f8ef484..16305f0 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderTimeTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderTimeTest.java
@@ -16,8 +16,8 @@
  */
 package org.apache.logging.log4j.core.appender.rolling;
 
-import static org.apache.logging.log4j.core.hamcrest.Descriptors.that;
-import static org.apache.logging.log4j.core.hamcrest.FileMatchers.hasName;
+import static org.apache.logging.log4j.core.test.hamcrest.Descriptors.that;
+import static org.apache.logging.log4j.core.test.hamcrest.FileMatchers.hasName;
 import static org.hamcrest.Matchers.endsWith;
 import static org.hamcrest.Matchers.hasItemInArray;
 import static org.junit.Assert.assertTrue;
@@ -26,7 +26,7 @@ import static org.junit.Assert.fail;
 import java.io.File;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.hamcrest.Matcher;
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingDirectSizeTimeNewDirectoryTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingDirectSizeTimeNewDirectoryTest.java
index 0211c6a..dca5ca6 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingDirectSizeTimeNewDirectoryTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingDirectSizeTimeNewDirectoryTest.java
@@ -25,7 +25,7 @@ import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.appender.RollingFileAppender;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.RuleChain;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingDirectTimeNewDirectoryTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingDirectTimeNewDirectoryTest.java
index 20c8a33..62d77a7 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingDirectTimeNewDirectoryTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingDirectTimeNewDirectoryTest.java
@@ -19,7 +19,7 @@ package org.apache.logging.log4j.core.appender.rolling;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.filefilter.TrueFileFilter;
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.RuleChain;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderReconfigureTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderReconfigureTest.java
index 97dcab2..413983c 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderReconfigureTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderReconfigureTest.java
@@ -17,7 +17,7 @@
 
 package org.apache.logging.log4j.core.appender.rolling;
 
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Rule;
 import org.junit.Test;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderReconfigureUndefinedSystemPropertyTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderReconfigureUndefinedSystemPropertyTest.java
index ade5e94..828dbad 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderReconfigureUndefinedSystemPropertyTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderReconfigureUndefinedSystemPropertyTest.java
@@ -17,7 +17,7 @@
 
 package org.apache.logging.log4j.core.appender.rolling;
 
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Rule;
 import org.junit.Test;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingNewDirectoryTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingNewDirectoryTest.java
index 07274d8..0d577d5 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingNewDirectoryTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingNewDirectoryTest.java
@@ -17,7 +17,7 @@
 package org.apache.logging.log4j.core.appender.rolling;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManagerHeaderFooterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManagerHeaderFooterTest.java
index e02a2a1..6191606 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManagerHeaderFooterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManagerHeaderFooterTest.java
@@ -27,7 +27,7 @@ import java.nio.charset.Charset;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.layout.HtmlLayout;
 import org.apache.logging.log4j.core.util.Closer;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Rule;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManagerTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManagerTest.java
index 9f1c6aa..c47d2ec 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManagerTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManagerTest.java
@@ -37,10 +37,10 @@ import java.nio.file.attribute.PosixFilePermissions;
 import java.util.Set;
 import java.util.concurrent.locks.LockSupport;
 
-import static org.apache.logging.log4j.core.hamcrest.FileMatchers.beforeNow;
-import static org.apache.logging.log4j.core.hamcrest.FileMatchers.hasLength;
-import static org.apache.logging.log4j.core.hamcrest.FileMatchers.isEmpty;
-import static org.apache.logging.log4j.core.hamcrest.FileMatchers.lastModified;
+import static org.apache.logging.log4j.core.test.hamcrest.FileMatchers.beforeNow;
+import static org.apache.logging.log4j.core.test.hamcrest.FileMatchers.hasLength;
+import static org.apache.logging.log4j.core.test.hamcrest.FileMatchers.isEmpty;
+import static org.apache.logging.log4j.core.test.hamcrest.FileMatchers.lastModified;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.lessThanOrEqualTo;
 import static org.junit.Assert.assertEquals;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAppenderDirectWriteTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAppenderDirectWriteTest.java
index 22e4a73..e662676 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAppenderDirectWriteTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAppenderDirectWriteTest.java
@@ -19,13 +19,13 @@ package org.apache.logging.log4j.core.appender.rolling;
 import java.io.File;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.RuleChain;
-import static org.apache.logging.log4j.core.hamcrest.Descriptors.that;
-import static org.apache.logging.log4j.core.hamcrest.FileMatchers.hasName;
+import static org.apache.logging.log4j.core.test.hamcrest.Descriptors.that;
+import static org.apache.logging.log4j.core.test.hamcrest.FileMatchers.hasName;
 import static org.hamcrest.Matchers.endsWith;
 import static org.hamcrest.Matchers.hasItemInArray;
 import static org.junit.Assert.*;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAppenderDirectWriteWithFilenameTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAppenderDirectWriteWithFilenameTest.java
index 3b1b7d0..2e362fe 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAppenderDirectWriteWithFilenameTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAppenderDirectWriteWithFilenameTest.java
@@ -19,7 +19,7 @@ package org.apache.logging.log4j.core.appender.rolling;
 import java.io.File;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RolloverWithDeletedOldFileTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RolloverWithDeletedOldFileTest.java
index 20b96f8..64e6307 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RolloverWithDeletedOldFileTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RolloverWithDeletedOldFileTest.java
@@ -17,7 +17,7 @@
 package org.apache.logging.log4j.core.appender.rolling;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.RuleChain;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RolloverWithPaddingTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RolloverWithPaddingTest.java
index 44d519c..6d3b299 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RolloverWithPaddingTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RolloverWithPaddingTest.java
@@ -25,7 +25,7 @@ import java.util.Arrays;
 import java.util.List;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.RuleChain;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/AbstractActionTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/AbstractActionTest.java
index b48d274..3ac2fd9 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/AbstractActionTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/AbstractActionTest.java
@@ -31,7 +31,7 @@ public class AbstractActionTest {
         assertThat(formattedMessage, containsString("Exception reported by action 'class org.apache."
                 + "logging.log4j.core.appender.rolling.action.AbstractActionTest$TestAction' java.io.IOException: "
                 + "failed" + System.lineSeparator()
-                + "\tat org.apache.logging.log4j.core.appender.rolling.action.AbstractActionTest"
+                + "\tat org.apache.logging.log4j.core/org.apache.logging.log4j.core.appender.rolling.action.AbstractActionTest"
                 + "$TestAction.execute(AbstractActionTest.java:"));
     }
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/DefaultRouteScriptAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/DefaultRouteScriptAppenderTest.java
index a50f877..25647ab 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/DefaultRouteScriptAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/DefaultRouteScriptAppenderTest.java
@@ -23,8 +23,8 @@ import org.apache.logging.log4j.Marker;
 import org.apache.logging.log4j.MarkerManager;
 import org.apache.logging.log4j.core.Logger;
 import org.apache.logging.log4j.core.config.AppenderControl;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/JsonRoutingAppender2Test.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/JsonRoutingAppender2Test.java
index 2efa56b..b9f575d 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/JsonRoutingAppender2Test.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/JsonRoutingAppender2Test.java
@@ -24,7 +24,7 @@ import java.util.List;
 
 import org.apache.logging.log4j.EventLogger;
 import org.apache.logging.log4j.core.LogEvent;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.apache.logging.log4j.message.StructuredDataMessage;
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/JsonRoutingAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/JsonRoutingAppenderTest.java
index dcccad2..405c8d1 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/JsonRoutingAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/JsonRoutingAppenderTest.java
@@ -24,7 +24,7 @@ import java.util.List;
 
 import org.apache.logging.log4j.EventLogger;
 import org.apache.logging.log4j.core.LogEvent;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.apache.logging.log4j.message.StructuredDataMessage;
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/PropertiesRoutingAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/PropertiesRoutingAppenderTest.java
index fd361d1..6280cc4 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/PropertiesRoutingAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/PropertiesRoutingAppenderTest.java
@@ -24,9 +24,9 @@ import java.util.List;
 
 import org.apache.logging.log4j.EventLogger;
 import org.apache.logging.log4j.core.LogEvent;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.apache.logging.log4j.message.StructuredDataMessage;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutesScriptAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutesScriptAppenderTest.java
index ab55bec..8e14579 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutesScriptAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutesScriptAppenderTest.java
@@ -31,8 +31,8 @@ import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.Logger;
 import org.apache.logging.log4j.core.config.AppenderControl;
 import org.apache.logging.log4j.core.impl.DefaultLogEventFactory;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppender2767Test.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppender2767Test.java
index 006769f..7e0db86 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppender2767Test.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppender2767Test.java
@@ -17,7 +17,7 @@
 package org.apache.logging.log4j.core.appender.routing;
 
 import org.apache.logging.log4j.EventLogger;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.apache.logging.log4j.message.StructuredDataMessage;
 import org.junit.After;
 import org.junit.Before;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderTest.java
index 0d3423d..65b1099 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderTest.java
@@ -21,9 +21,9 @@ import java.util.List;
 
 import org.apache.logging.log4j.EventLogger;
 import org.apache.logging.log4j.core.LogEvent;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.apache.logging.log4j.message.StructuredDataMessage;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderWithJndiTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderWithJndiTest.java
index 14a245f..9773c36 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderWithJndiTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderWithJndiTest.java
@@ -23,10 +23,10 @@ import javax.naming.InitialContext;
 import javax.naming.NamingException;
 
 import org.apache.logging.log4j.EventLogger;
-import org.apache.logging.log4j.core.junit.JndiRule;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.JndiRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.apache.logging.log4j.message.StructuredDataMessage;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.ClassRule;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderWithPurgingTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderWithPurgingTest.java
index 373820b..692c839 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderWithPurgingTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderWithPurgingTest.java
@@ -28,9 +28,9 @@ import java.util.Set;
 
 import org.apache.logging.log4j.EventLogger;
 import org.apache.logging.log4j.core.LogEvent;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.apache.logging.log4j.message.StructuredDataMessage;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingDefaultAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingDefaultAppenderTest.java
index a40403c..f949bd8 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingDefaultAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingDefaultAppenderTest.java
@@ -24,7 +24,7 @@ import java.util.List;
 
 import org.apache.logging.log4j.EventLogger;
 import org.apache.logging.log4j.core.LogEvent;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.apache.logging.log4j.message.StructuredDataMessage;
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AbstractAsyncThreadContextTestBase.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AbstractAsyncThreadContextTestBase.java
index a590c2d..65c46f0 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AbstractAsyncThreadContextTestBase.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AbstractAsyncThreadContextTestBase.java
@@ -24,7 +24,7 @@ import java.io.IOException;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.ThreadContext;
-import org.apache.logging.log4j.ThreadContextTestAccess;
+import org.apache.logging.log4j.core.ThreadContextTestAccess;
 import org.apache.logging.log4j.core.CoreLoggerContexts;
 import org.apache.logging.log4j.core.config.ConfigurationFactory;
 import org.apache.logging.log4j.core.jmx.RingBufferAdmin;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AsyncAppenderExceptionHandlingTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AsyncAppenderExceptionHandlingTest.java
index 164bdca..f2fb904 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AsyncAppenderExceptionHandlingTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AsyncAppenderExceptionHandlingTest.java
@@ -25,7 +25,7 @@ import org.apache.logging.log4j.core.config.AppenderControl;
 import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.config.Configurator;
 import org.apache.logging.log4j.message.Message;
-import org.apache.logging.log4j.test.appender.FailOnceAppender;
+import org.apache.logging.log4j.core.test.appender.FailOnceAppender;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.params.ParameterizedTest;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggersWithAsyncAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggersWithAsyncAppenderTest.java
index d3ad6dc..c00d8d6 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggersWithAsyncAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggersWithAsyncAppenderTest.java
@@ -21,7 +21,7 @@ import java.util.List;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.categories.AsyncLoggers;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.ClassRule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggersWithAsyncLoggerConfigTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggersWithAsyncLoggerConfigTest.java
index 8360c9e..1204eb9 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggersWithAsyncLoggerConfigTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AsyncLoggersWithAsyncLoggerConfigTest.java
@@ -21,7 +21,7 @@ import java.util.List;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.categories.AsyncLoggers;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.ClassRule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AsyncRootReloadTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AsyncRootReloadTest.java
index 8e37394..e292649 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AsyncRootReloadTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AsyncRootReloadTest.java
@@ -25,7 +25,7 @@ import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.categories.AsyncLoggers;
 import org.apache.logging.log4j.core.util.FileUtils;
 import org.apache.logging.log4j.test.junit.CleanFiles;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.ClassRule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/BasicAsyncLoggerContextSelectorTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/BasicAsyncLoggerContextSelectorTest.java
index 823cc3f..77d121c 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/BasicAsyncLoggerContextSelectorTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/BasicAsyncLoggerContextSelectorTest.java
@@ -17,7 +17,7 @@
 package org.apache.logging.log4j.core.async;
 
 import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.categories.AsyncLoggers;
+import org.apache.logging.log4j.core.categories.AsyncLoggers;
 import org.apache.logging.log4j.core.LifeCycle;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.util.Constants;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/Log4j2Jira1688AsyncTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/Log4j2Jira1688AsyncTest.java
index e8b2896..29573b7 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/Log4j2Jira1688AsyncTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/Log4j2Jira1688AsyncTest.java
@@ -25,9 +25,9 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.core.categories.AsyncLoggers;
 import org.apache.logging.log4j.core.config.ConfigurationFactory;
 import org.apache.logging.log4j.core.util.Constants;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.apache.logging.log4j.spi.ExtendedLogger;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.AfterClass;
 import org.junit.Assert;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/Log4j2Jira1688Test.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/Log4j2Jira1688Test.java
index a885e29..2d964b2 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/Log4j2Jira1688Test.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/Log4j2Jira1688Test.java
@@ -25,9 +25,9 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.core.categories.AsyncLoggers;
 import org.apache.logging.log4j.core.config.ConfigurationFactory;
 import org.apache.logging.log4j.core.util.Constants;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.apache.logging.log4j.spi.ExtendedLogger;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.AfterClass;
 import org.junit.Assert;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncAppenderTest.java
index d949254..350383c 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncAppenderTest.java
@@ -23,7 +23,7 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.categories.AsyncLoggers;
 import org.apache.logging.log4j.core.config.ConfigurationFactory;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.apache.logging.log4j.message.ParameterizedMessage;
 import org.junit.Before;
 import org.junit.BeforeClass;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncAppenderTest2.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncAppenderTest2.java
index 311a479..a085ed0 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncAppenderTest2.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncAppenderTest2.java
@@ -22,7 +22,7 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.categories.AsyncLoggers;
 import org.apache.logging.log4j.core.config.ConfigurationFactory;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Rule;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfigLoggingFromToStringTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfigLoggingFromToStringTest.java
index a849c21..da79dd1 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfigLoggingFromToStringTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfigLoggingFromToStringTest.java
@@ -25,7 +25,7 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.categories.AsyncLoggers;
 import org.apache.logging.log4j.core.config.ConfigurationFactory;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.apache.logging.log4j.status.StatusData;
 import org.apache.logging.log4j.status.StatusLogger;
 import org.junit.Before;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfigLoggingFromToStringTest2.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfigLoggingFromToStringTest2.java
index a36125f..8903ff4 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfigLoggingFromToStringTest2.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfigLoggingFromToStringTest2.java
@@ -22,7 +22,7 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.categories.AsyncLoggers;
 import org.apache.logging.log4j.core.config.ConfigurationFactory;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Rule;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfigTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfigTest.java
index 1b977f8..664e328 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfigTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfigTest.java
@@ -23,7 +23,7 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.categories.AsyncLoggers;
 import org.apache.logging.log4j.core.config.ConfigurationFactory;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.apache.logging.log4j.message.ParameterizedMessage;
 import org.junit.Before;
 import org.junit.BeforeClass;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfigTest2.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfigTest2.java
index 43ce2de..9cb685e 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfigTest2.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerConfigTest2.java
@@ -22,7 +22,7 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.categories.AsyncLoggers;
 import org.apache.logging.log4j.core.config.ConfigurationFactory;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Rule;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerLoggingFromToStringTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerLoggingFromToStringTest.java
index 7d29076..ba5c5cf 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerLoggingFromToStringTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerLoggingFromToStringTest.java
@@ -25,7 +25,7 @@ import org.apache.logging.log4j.core.categories.AsyncLoggers;
 import org.apache.logging.log4j.core.CoreLoggerContexts;
 import org.apache.logging.log4j.core.config.ConfigurationFactory;
 import org.apache.logging.log4j.core.util.Constants;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.apache.logging.log4j.message.ParameterizedMessage;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.AfterClass;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerLoggingFromToStringTest2.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerLoggingFromToStringTest2.java
index 96384cc..11c9ffa 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerLoggingFromToStringTest2.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerLoggingFromToStringTest2.java
@@ -25,7 +25,7 @@ import org.apache.logging.log4j.core.categories.AsyncLoggers;
 import org.apache.logging.log4j.core.CoreLoggerContexts;
 import org.apache.logging.log4j.core.config.ConfigurationFactory;
 import org.apache.logging.log4j.core.util.Constants;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.apache.logging.log4j.message.ParameterizedMessage;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.AfterClass;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerTest.java
index af1bba4..954d606 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerTest.java
@@ -24,7 +24,7 @@ import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.categories.AsyncLoggers;
 import org.apache.logging.log4j.core.config.ConfigurationFactory;
 import org.apache.logging.log4j.core.util.Constants;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.apache.logging.log4j.message.ParameterizedMessage;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.AfterClass;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerTest2.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerTest2.java
index 1840832..1a454f2 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerTest2.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerTest2.java
@@ -23,7 +23,7 @@ import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.categories.AsyncLoggers;
 import org.apache.logging.log4j.core.config.ConfigurationFactory;
 import org.apache.logging.log4j.core.util.Constants;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.AfterClass;
 import org.junit.Before;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerTest3.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerTest3.java
index 12024ad..5a44021 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerTest3.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/QueueFullAsyncLoggerTest3.java
@@ -22,7 +22,7 @@ import org.apache.logging.log4j.core.categories.AsyncLoggers;
 import org.apache.logging.log4j.core.GarbageCollectionHelper;
 import org.apache.logging.log4j.core.config.ConfigurationFactory;
 import org.apache.logging.log4j.core.util.Constants;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.AfterClass;
@@ -128,4 +128,4 @@ public class QueueFullAsyncLoggerTest3 extends QueueFullAbstractTest {
             super.finalize();
         }
     }
-}
\ No newline at end of file
+}
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/categories/PerformanceTests.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/categories/GarbageFree.java
similarity index 83%
rename from log4j-core/src/test/java/org/apache/logging/log4j/categories/PerformanceTests.java
rename to log4j-core/src/test/java/org/apache/logging/log4j/core/categories/GarbageFree.java
index fb6eecf..9ed41a1 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/categories/PerformanceTests.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/categories/GarbageFree.java
@@ -15,10 +15,10 @@
  * limitations under the license.
  */
 
-package org.apache.logging.log4j.categories;
+package org.apache.logging.log4j.core.categories;
 
 /**
- * JUnit category to indicate a test is primarily for testing performance.
+ * JUnit category to indicate a test is for Garbage Free Validation.
  */
-public interface PerformanceTests {
+public interface GarbageFree {
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/AppenderControlArraySetTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/AppenderControlArraySetTest.java
index d102cfa..e75dd24 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/AppenderControlArraySetTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/AppenderControlArraySetTest.java
@@ -18,7 +18,7 @@ package org.apache.logging.log4j.core.config;
 
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.Appender;
-import org.apache.logging.log4j.test.appender.FailOnceAppender;
+import org.apache.logging.log4j.core.test.appender.FailOnceAppender;
 import org.junit.jupiter.api.Test;
 
 import java.util.HashMap;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/CompositeConfigurationTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/CompositeConfigurationTest.java
index 3db6ce0..6d1639a 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/CompositeConfigurationTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/CompositeConfigurationTest.java
@@ -27,7 +27,7 @@ import org.apache.logging.log4j.core.appender.FileAppender;
 import org.apache.logging.log4j.core.config.composite.CompositeConfiguration;
 import org.apache.logging.log4j.core.filter.RegexFilter;
 import org.apache.logging.log4j.core.util.Throwables;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.Description;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/ConfigurationFactoryTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/ConfigurationFactoryTest.java
index bc1958a..6db5c0f 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/ConfigurationFactoryTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/ConfigurationFactoryTest.java
@@ -25,7 +25,7 @@ import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.appender.ConsoleAppender;
 import org.apache.logging.log4j.core.filter.ThreadContextMapFilter;
 import org.apache.logging.log4j.test.junit.CleanUpFiles;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/CustomConfigurationTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/CustomConfigurationTest.java
index 41c04a0..d3a2665 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/CustomConfigurationTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/CustomConfigurationTest.java
@@ -24,7 +24,7 @@ import org.apache.logging.log4j.core.appender.FileAppender;
 import org.apache.logging.log4j.core.config.xml.XmlConfiguration;
 import org.apache.logging.log4j.core.layout.PatternLayout;
 import org.apache.logging.log4j.test.junit.CleanUpFiles;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.apache.logging.log4j.status.StatusConsoleListener;
 import org.apache.logging.log4j.status.StatusListener;
 import org.apache.logging.log4j.status.StatusLogger;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/FileOutputTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/FileOutputTest.java
index 5b8a732..9479965 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/FileOutputTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/FileOutputTest.java
@@ -17,7 +17,7 @@
 package org.apache.logging.log4j.core.config;
 
 import org.apache.logging.log4j.test.junit.CleanUpFiles;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.junit.jupiter.api.Test;
 
 import java.io.IOException;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/JiraLog4j2_2134Test.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/JiraLog4j2_2134Test.java
index e9bae4f..d677b63 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/JiraLog4j2_2134Test.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/JiraLog4j2_2134Test.java
@@ -24,7 +24,7 @@ import org.apache.logging.log4j.core.Appender;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.appender.FileAppender;
 import org.apache.logging.log4j.core.layout.PatternLayout;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Tag;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/LoggersPluginTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/LoggersPluginTest.java
index 0c06e97..1377940 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/LoggersPluginTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/LoggersPluginTest.java
@@ -20,7 +20,7 @@ package org.apache.logging.log4j.core.config;
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.apache.logging.log4j.status.StatusData;
 import org.apache.logging.log4j.status.StatusLogger;
 import org.junit.jupiter.api.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/MissingRootLoggerTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/MissingRootLoggerTest.java
index a4d11db..c4e69a2 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/MissingRootLoggerTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/MissingRootLoggerTest.java
@@ -22,10 +22,10 @@ import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.Appender;
 import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.junit.jupiter.api.Test;
 
-import static org.apache.logging.log4j.core.hamcrest.MapMatchers.hasSize;
+import static org.apache.logging.log4j.core.test.hamcrest.MapMatchers.hasSize;
 import static org.hamcrest.MatcherAssert.*;
 import static org.hamcrest.Matchers.hasKey;
 import static org.hamcrest.Matchers.instanceOf;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/MultipleTriggeringPolicyTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/MultipleTriggeringPolicyTest.java
index d73fefe..89de53a 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/MultipleTriggeringPolicyTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/MultipleTriggeringPolicyTest.java
@@ -22,7 +22,7 @@ import org.apache.logging.log4j.core.appender.rolling.CompositeTriggeringPolicy;
 import org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy;
 import org.apache.logging.log4j.core.appender.rolling.TimeBasedTriggeringPolicy;
 import org.apache.logging.log4j.core.appender.rolling.TriggeringPolicy;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/PropertyTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/PropertyTest.java
index 6cd1213..ff08c3b 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/PropertyTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/PropertyTest.java
@@ -18,9 +18,9 @@ package org.apache.logging.log4j.core.config;/*
 import java.util.List;
 
 import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.*;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/ReconfigurationDeadlockTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/ReconfigurationDeadlockTest.java
index 6849734..c60a4d6 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/ReconfigurationDeadlockTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/ReconfigurationDeadlockTest.java
@@ -27,7 +27,7 @@ import org.apache.logging.log4j.core.appender.AbstractAppender;
 import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
 import org.apache.logging.log4j.core.config.plugins.PluginElement;
 import org.apache.logging.log4j.core.config.plugins.PluginFactory;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.apache.logging.log4j.plugins.Plugin;
 import org.apache.logging.log4j.plugins.validation.constraints.Required;
 import org.junit.jupiter.api.AfterEach;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/ReliabilityStrategyTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/ReliabilityStrategyTest.java
index 6a23135..fc7f0a9 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/ReliabilityStrategyTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/ReliabilityStrategyTest.java
@@ -18,8 +18,8 @@
 package org.apache.logging.log4j.core.config;
 
 import org.apache.logging.log4j.core.appender.AsyncAppender;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/TestConfigurator.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/TestConfigurator.java
index 12ae352..c592236 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/TestConfigurator.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/TestConfigurator.java
@@ -43,7 +43,7 @@ import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
 
-import static org.apache.logging.log4j.core.hamcrest.MapMatchers.hasSize;
+import static org.apache.logging.log4j.core.test.hamcrest.MapMatchers.hasSize;
 import static org.hamcrest.MatcherAssert.*;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.greaterThan;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/arbiters/BasicArbiterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/arbiters/BasicArbiterTest.java
index 5ec1b3e..530bf20 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/arbiters/BasicArbiterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/arbiters/BasicArbiterTest.java
@@ -20,7 +20,7 @@ import org.apache.logging.log4j.core.Appender;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.appender.ConsoleAppender;
 import org.apache.logging.log4j.core.config.Configurator;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Test;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/arbiters/ScriptArbiterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/arbiters/ScriptArbiterTest.java
index 55763fe..e4a145f 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/arbiters/ScriptArbiterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/arbiters/ScriptArbiterTest.java
@@ -20,7 +20,7 @@ import org.apache.logging.log4j.core.Appender;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.appender.ConsoleAppender;
 import org.apache.logging.log4j.core.config.Configurator;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Test;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/arbiters/SelectArbiterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/arbiters/SelectArbiterTest.java
index 1b7ea9d..443a386 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/arbiters/SelectArbiterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/arbiters/SelectArbiterTest.java
@@ -20,7 +20,7 @@ import org.apache.logging.log4j.core.Appender;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.appender.ConsoleAppender;
 import org.apache.logging.log4j.core.config.Configurator;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Test;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/LegacyPluginTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/LegacyPluginTest.java
index c28fc23..0310331 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/LegacyPluginTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/LegacyPluginTest.java
@@ -20,7 +20,7 @@ import org.apache.logging.log4j.core.Appender;
 import org.apache.logging.log4j.core.Layout;
 import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.config.xml.XmlConfiguration;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.junit.jupiter.api.Test;
 
 import java.util.Map;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/util/PluginManagerPackagesTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/util/PluginManagerPackagesTest.java
index a6d9750..326b3bc 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/util/PluginManagerPackagesTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/util/PluginManagerPackagesTest.java
@@ -19,6 +19,7 @@ package org.apache.logging.log4j.core.config.plugins.util;
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.Locale;
@@ -37,13 +38,14 @@ import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.config.ConfigurationFactory;
 import org.apache.logging.log4j.core.config.Configurator;
 import org.apache.logging.log4j.status.StatusLogger;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.*;
 
 public class PluginManagerPackagesTest {
+    private static final String TEST_SOURCE = "target/test-classes/customPlugin/FixedStringLayout.java";
     private static Configuration config;
     private static ListAppender listAppender;
     private static LoggerContext ctx;
@@ -51,17 +53,32 @@ public class PluginManagerPackagesTest {
     @AfterAll
     public static void cleanupClass() {
         System.clearProperty(ConfigurationFactory.CONFIGURATION_FILE_PROPERTY);
-        ctx.reconfigure();
+        if (ctx != null) {
+            ctx.reconfigure();
+        }
         StatusLogger.getLogger().reset();
     }
 
+    @AfterAll
+    public static void afterClass() {
+        File file = new File(TEST_SOURCE);
+        File parent = file.getParentFile();
+        if (file.exists()) {
+            file.delete();
+        }
+        file = new File(parent, "FixedStringLayout.class");
+        if (file.exists()) {
+            file.delete();
+        }
+    }
+
     @Test
     public void test() throws Exception {
 
         // To ensure our custom plugin is NOT included in the log4j plugin metadata file,
         // we make sure the class does not exist until after the build is finished.
         // So we don't create the custom plugin class until this test is run.
-        final File orig = new File("target/test-classes/customplugin/FixedStringLayout.java.source");
+        final File orig = new File(TEST_SOURCE + ".source");
         final File f = new File(orig.getParentFile(), "FixedStringLayout.java");
         assertTrue(orig.renameTo(f), "renamed source file failed");
         compile(f);
@@ -92,10 +109,10 @@ public class PluginManagerPackagesTest {
         try (final StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null)) {
             final Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjectsFromFiles(
                     Collections.singletonList(f));
-
+            List<String> options =
+                    new ArrayList<>(Arrays.asList("-classpath", System.getProperty("jdk.module.path")));
+            options.add("-proc:none");
             // compile generated source
-            // (switch off annotation processing: no need to create Log4j2Plugins.dat)
-            final List<String> options = Collections.singletonList("-proc:none");
             compiler.getTask(null, fileManager, diagnostics, options, null, compilationUnits).call();
 
             // check we don't have any compilation errors
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/properties/PropertiesConfigurationTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/properties/PropertiesConfigurationTest.java
index c515fec..52c62ef 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/properties/PropertiesConfigurationTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/properties/PropertiesConfigurationTest.java
@@ -25,7 +25,7 @@ import org.apache.logging.log4j.core.LifeCycle;
 import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.config.LoggerConfig;
 import org.apache.logging.log4j.core.filter.ThresholdFilter;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.junit.jupiter.api.Test;
 
 import java.util.Map;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/xml/XmlLoggerPropsTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/xml/XmlLoggerPropsTest.java
index 674eaa4..7dfe550 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/xml/XmlLoggerPropsTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/xml/XmlLoggerPropsTest.java
@@ -17,9 +17,9 @@
 package org.apache.logging.log4j.core.config.xml;
 
 import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/AbstractScriptFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/AbstractScriptFilterTest.java
index fc77496..8b98d83 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/AbstractScriptFilterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/AbstractScriptFilterTest.java
@@ -21,9 +21,9 @@ import java.util.List;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.ThreadContext;
 import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.junit.Named;
+import org.apache.logging.log4j.core.test.junit.Named;
 import org.apache.logging.log4j.test.junit.UsingThreadContextMap;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/BurstFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/BurstFilterTest.java
index 309715e..1cc0ef7 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/BurstFilterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/BurstFilterTest.java
@@ -21,9 +21,9 @@ import java.util.List;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.*;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/DynamicThresholdFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/DynamicThresholdFilterTest.java
index 99374b8..6296b77 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/DynamicThresholdFilterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/DynamicThresholdFilterTest.java
@@ -23,7 +23,7 @@ import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.core.util.KeyValuePair;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.apache.logging.log4j.test.junit.UsingThreadContextMap;
 import org.apache.logging.log4j.message.SimpleMessage;
 import org.junit.jupiter.api.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/MapFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/MapFilterTest.java
index 95456c5..041816f 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/MapFilterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/MapFilterTest.java
@@ -27,10 +27,10 @@ import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.Filter;
 import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.util.KeyValuePair;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
 import org.apache.logging.log4j.message.StringMapMessage;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.apache.logging.log4j.util.IndexedReadOnlyStringMap;
 import org.junit.jupiter.api.Test;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptFileFilterPropertiesTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptFileFilterPropertiesTest.java
index 1364619..1afc3c0 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptFileFilterPropertiesTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptFileFilterPropertiesTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.logging.log4j.core.filter;
 
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 
 @LoggerContextSource("log4j-scriptFile-filters.properties")
 public class ScriptFileFilterPropertiesTest extends AbstractScriptFilterTest {
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptFileFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptFileFilterTest.java
index 97fe6d2..fca3e96 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptFileFilterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptFileFilterTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.logging.log4j.core.filter;
 
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 
 @LoggerContextSource("log4j-scriptFile-filters.xml")
 public class ScriptFileFilterTest extends AbstractScriptFilterTest {
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptFilterTest.java
index be25741..368d438 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptFilterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptFilterTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.logging.log4j.core.filter;
 
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 
 @LoggerContextSource("log4j-script-filters.xml")
 public class ScriptFilterTest extends AbstractScriptFilterTest {
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptRefFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptRefFilterTest.java
index 93131a4..9a07f24 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptRefFilterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ScriptRefFilterTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.logging.log4j.core.filter;
 
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 
 @LoggerContextSource("log4j-scriptRef-filters.xml")
 public class ScriptRefFilterTest extends AbstractScriptFilterTest {
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/StructuredDataFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/StructuredDataFilterTest.java
index ca3b892..db306f3 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/StructuredDataFilterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/StructuredDataFilterTest.java
@@ -22,7 +22,7 @@ import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.Filter;
 import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.util.KeyValuePair;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.apache.logging.log4j.message.StructuredDataMessage;
 import org.apache.logging.log4j.util.IndexedReadOnlyStringMap;
 import org.junit.jupiter.api.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/hamcrest/FileMatchers.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/hamcrest/FileMatchers.java
deleted file mode 100644
index 581ac40..0000000
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/hamcrest/FileMatchers.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * 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.
- */
-package org.apache.logging.log4j.core.hamcrest;
-
-import java.io.File;
-
-import org.hamcrest.FeatureMatcher;
-import org.hamcrest.Matcher;
-
-import static org.hamcrest.core.Is.is;
-import static org.hamcrest.core.IsEqual.equalTo;
-import static org.hamcrest.number.OrderingComparison.greaterThan;
-import static org.hamcrest.number.OrderingComparison.lessThanOrEqualTo;
-
-/**
- * Hamcrest Matchers that operate on File objects.
- *
- * @since 2.1
- */
-public final class FileMatchers {
-
-    /**
-     * Matches if the File exists.
-     *
-     * @return the Matcher.
-     */
-    public static Matcher<File> exists() {
-        return new FeatureMatcher<File, Boolean>(is(true), "file exists", "file exists") {
-            @Override
-            protected Boolean featureValueOf(final File actual) {
-                return actual.exists();
-            }
-        };
-    }
-
-    /**
-     * Matches a Long Matcher against the file length.
-     *
-     * @param matcher the Matcher to use on the File length.
-     * @return the Matcher.
-     */
-    public static Matcher<File> hasLength(final Matcher<Long> matcher) {
-        return new FeatureMatcher<File, Long>(matcher, "file with size", "file with size") {
-            @Override
-            protected Long featureValueOf(final File actual) {
-                return actual.length();
-            }
-        };
-    }
-
-    /**
-     * Matches a specific file length.
-     *
-     * @param length the file length to match
-     * @param <T>    the type of the length.
-     * @return the Matcher.
-     */
-    public static <T extends Number> Matcher<File> hasLength(final T length) {
-        return hasLength(equalTo(length.longValue()));
-    }
-
-    /**
-     * Matches a specific file length.
-     *
-     * @param length the file length to match
-     * @return the Matcher.
-     */
-    public static Matcher<File> hasLength(final long length) {
-        return hasLength(equalTo(length));
-    }
-
-    /**
-     * Matches a file with length equal to zero.
-     *
-     * @return the Matcher.
-     */
-    public static Matcher<File> isEmpty() {
-        return hasLength(0L);
-    }
-
-    /**
-     * Matches against a file's last modification time in milliseconds.
-     *
-     * @param matcher the Matcher to use on the File modification time.
-     * @return the Matcher.
-     */
-    public static Matcher<File> lastModified(final Matcher<Long> matcher) {
-        return new FeatureMatcher<File, Long>(matcher, "was last modified", "was last modified") {
-            @Override
-            protected Long featureValueOf(final File actual) {
-                return actual.lastModified();
-            }
-        };
-    }
-
-    /**
-     * Matches a time in millis before the current time.
-     *
-     * @return the Matcher.
-     */
-    public static Matcher<Long> beforeNow() {
-        return lessThanOrEqualTo(System.currentTimeMillis());
-    }
-
-    /**
-     * Matches the number of files in a directory.
-     *
-     * @param matcher the Matcher to use on the number of files.
-     * @return the Matcher.
-     */
-    public static Matcher<File> hasNumberOfFiles(final Matcher<Integer> matcher) {
-        return new FeatureMatcher<File, Integer>(matcher, "directory with number of files",
-            "directory with number of files") {
-            @Override
-            protected Integer featureValueOf(final File actual) {
-                final File[] files = actual.listFiles();
-                return files == null ? 0 : files.length;
-            }
-        };
-    }
-
-    /**
-     * Matches a directory with at least one file.
-     *
-     * @return the Matcher.
-     */
-    public static Matcher<File> hasFiles() {
-        return hasNumberOfFiles(greaterThan(0));
-    }
-
-    /**
-     * Matches a file name.
-     *
-     * @param matcher the Matcher to use on the file name.
-     * @return the Matcher.
-     */
-    public static Matcher<File> hasName(final Matcher<String> matcher) {
-        return new FeatureMatcher<File, String>(matcher, "file named", "file named") {
-            @Override
-            protected String featureValueOf(final File actual) {
-                return actual.getName();
-            }
-        };
-    }
-
-    private FileMatchers() {
-    }
-
-}
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryPropertySetMissingConstructorTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryPropertySetMissingConstructorTest.java
index 13a39ed..3cf5b12 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryPropertySetMissingConstructorTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryPropertySetMissingConstructorTest.java
@@ -33,9 +33,7 @@ public class ContextDataFactoryPropertySetMissingConstructorTest {
         System.setProperty("log4j2.ContextData", FactoryTestStringMapWithoutIntConstructor.class.getName());
         assertTrue(ContextDataFactory.createContextData(2) instanceof SortedArrayStringMap);
         final SortedArrayStringMap actual = (SortedArrayStringMap) ContextDataFactory.createContextData(2);
-        final Field thresholdField = SortedArrayStringMap.class.getDeclaredField("threshold");
-        thresholdField.setAccessible(true);
-        assertEquals(2, thresholdField.getInt(actual));
+        assertEquals(2, actual.getThreshold());
         System.clearProperty("log4j2.ContextData");
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryTest.java
index 24fce8f..fa33262 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryTest.java
@@ -40,8 +40,6 @@ public class ContextDataFactoryTest {
     @Test
     public void intArgSetsCapacityIfNoPropertySpecified() throws Exception {
         final SortedArrayStringMap actual = (SortedArrayStringMap) ContextDataFactory.createContextData(2);
-        final Field thresholdField = SortedArrayStringMap.class.getDeclaredField("threshold");
-        thresholdField.setAccessible(true);
-        assertEquals(2, thresholdField.getInt(actual));
+        assertEquals(2, actual.getThreshold());
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/NestedLoggingFromThrowableMessageTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/NestedLoggingFromThrowableMessageTest.java
index 59afd62..228cd4f 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/NestedLoggingFromThrowableMessageTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/NestedLoggingFromThrowableMessageTest.java
@@ -19,7 +19,7 @@ package org.apache.logging.log4j.core.impl;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.CoreLoggerContexts;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Rule;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/NestedLoggingFromToStringTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/NestedLoggingFromToStringTest.java
index 6563eff..2e7246c 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/NestedLoggingFromToStringTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/NestedLoggingFromToStringTest.java
@@ -20,8 +20,8 @@ import java.util.List;
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Rule;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/junit/ConfigurationResolver.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/junit/ConfigurationResolver.java
deleted file mode 100644
index bb713f1..0000000
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/junit/ConfigurationResolver.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.logging.log4j.core.junit;
-
-import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.config.Configuration;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.api.extension.ParameterContext;
-import org.junit.jupiter.api.extension.ParameterResolutionException;
-import org.junit.jupiter.api.extension.support.TypeBasedParameterResolver;
-
-import static org.apache.logging.log4j.core.junit.LoggerContextResolver.getParameterLoggerContext;
-
-class ConfigurationResolver extends TypeBasedParameterResolver<Configuration> {
-    @Override
-    public Configuration resolveParameter(
-            ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
-        final LoggerContext loggerContext = getParameterLoggerContext(parameterContext, extensionContext);
-        if (loggerContext == null) {
-            throw new ParameterResolutionException("No LoggerContext defined");
-        }
-        return loggerContext.getConfiguration();
-    }
-}
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/junit/LoggerContextResolver.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/junit/LoggerContextResolver.java
deleted file mode 100644
index 11193d5..0000000
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/junit/LoggerContextResolver.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.logging.log4j.core.junit;
-
-import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.LoggerContextAccessor;
-import org.apache.logging.log4j.core.config.Configurator;
-import org.junit.jupiter.api.extension.AfterAllCallback;
-import org.junit.jupiter.api.extension.AfterEachCallback;
-import org.junit.jupiter.api.extension.BeforeAllCallback;
-import org.junit.jupiter.api.extension.BeforeEachCallback;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.api.extension.ParameterContext;
-import org.junit.jupiter.api.extension.ParameterResolutionException;
-import org.junit.jupiter.api.extension.support.TypeBasedParameterResolver;
-
-import java.lang.reflect.Method;
-import java.util.concurrent.TimeUnit;
-
-class LoggerContextResolver extends TypeBasedParameterResolver<LoggerContext> implements BeforeAllCallback,
-        AfterAllCallback, BeforeEachCallback, AfterEachCallback {
-    @Override
-    public void beforeAll(ExtensionContext context) throws Exception {
-        final Class<?> testClass = context.getRequiredTestClass();
-        final LoggerContextSource testSource = testClass.getAnnotation(LoggerContextSource.class);
-        if (testSource != null) {
-            final LoggerContextConfig config = new LoggerContextConfig(testSource, context);
-            getTestClassStore(context).put(LoggerContext.class, config);
-        }
-    }
-
-    @Override
-    public void afterAll(ExtensionContext context) throws Exception {
-        final LoggerContextConfig config =
-                getTestClassStore(context).get(LoggerContext.class, LoggerContextConfig.class);
-        if (config != null) {
-            config.close();
-        }
-    }
-
-    @Override
-    public void beforeEach(ExtensionContext context) throws Exception {
-        final Class<?> testClass = context.getRequiredTestClass();
-        if (testClass.isAnnotationPresent(LoggerContextSource.class)) {
-            final LoggerContextConfig config = getTestClassStore(context).get(LoggerContext.class, LoggerContextConfig.class);
-            if (config == null) {
-                throw new IllegalStateException(
-                        "Specified @LoggerContextSource but no LoggerContext found for test class " +
-                                testClass.getCanonicalName());
-            }
-            if (config.reconfigurationPolicy == ReconfigurationPolicy.BEFORE_EACH) {
-                config.reconfigure();
-            }
-        }
-        final LoggerContextSource source = context.getRequiredTestMethod().getAnnotation(LoggerContextSource.class);
-        if (source != null) {
-            final LoggerContextConfig config = new LoggerContextConfig(source, context);
-            if (config.reconfigurationPolicy == ReconfigurationPolicy.BEFORE_EACH) {
-                config.reconfigure();
-            }
-            getTestInstanceStore(context).put(LoggerContext.class, config);
-        }
-    }
-
-    @Override
-    public void afterEach(ExtensionContext context) throws Exception {
-        // method-annotated variant
-        final LoggerContextConfig testInstanceConfig =
-                getTestInstanceStore(context).get(LoggerContext.class, LoggerContextConfig.class);
-        if (testInstanceConfig != null) {
-            testInstanceConfig.close();
-        }
-        // reloadable variant
-        final Class<?> testClass = context.getRequiredTestClass();
-        if (testClass.isAnnotationPresent(LoggerContextSource.class)) {
-            final LoggerContextConfig config = getTestClassStore(context).get(LoggerContext.class, LoggerContextConfig.class);
-            if (config == null) {
-                throw new IllegalStateException(
-                        "Specified @LoggerContextSource but no LoggerContext found for test class " +
-                                testClass.getCanonicalName());
-            }
-            if (config.reconfigurationPolicy == ReconfigurationPolicy.AFTER_EACH) {
-                config.reconfigure();
-            }
-        }
-    }
-
-    @Override
-    public LoggerContext resolveParameter(
-            ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
-        return getParameterLoggerContext(parameterContext, extensionContext);
-    }
-
-    private static ExtensionContext.Store getTestClassStore(final ExtensionContext context) {
-        return context.getStore(ExtensionContext.Namespace.create(LoggerContext.class, context.getRequiredTestClass()));
-    }
-
-    private static ExtensionContext.Store getTestInstanceStore(final ExtensionContext context) {
-        return context.getStore(ExtensionContext.Namespace.create(LoggerContext.class, context.getRequiredTestInstance()));
-    }
-
-    static LoggerContext getParameterLoggerContext(ParameterContext parameterContext, ExtensionContext extensionContext) {
-        if (parameterContext.getDeclaringExecutable() instanceof Method) {
-            final LoggerContextAccessor accessor =
-                    getTestInstanceStore(extensionContext).get(LoggerContext.class, LoggerContextAccessor.class);
-            return accessor != null ? accessor.getLoggerContext() :
-                    getTestClassStore(extensionContext).get(LoggerContext.class, LoggerContextAccessor.class).getLoggerContext();
-        }
-        return getTestClassStore(extensionContext).get(LoggerContext.class, LoggerContextAccessor.class).getLoggerContext();
-    }
-
-    private static class LoggerContextConfig implements AutoCloseable, LoggerContextAccessor {
-        private final LoggerContext context;
-        private final ReconfigurationPolicy reconfigurationPolicy;
-        private final long shutdownTimeout;
-        private final TimeUnit unit;
-
-        private LoggerContextConfig(final LoggerContextSource source, final ExtensionContext extensionContext) {
-            final String displayName = extensionContext.getDisplayName();
-            final ClassLoader classLoader = extensionContext.getRequiredTestClass().getClassLoader();
-            context = Configurator.initialize(displayName, classLoader, source.value());
-            reconfigurationPolicy = source.reconfigure();
-            shutdownTimeout = source.timeout();
-            unit = source.unit();
-        }
-
-        @Override
-        public LoggerContext getLoggerContext() {
-            return context;
-        }
-
-        public void reconfigure() {
-            context.reconfigure();
-        }
-
-        @Override
-        public void close() {
-            context.stop(shutdownTimeout, unit);
-        }
-    }
-
-}
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/junit/Named.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/junit/Named.java
deleted file mode 100644
index c8477ae..0000000
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/junit/Named.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.logging.log4j.core.junit;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Specifies the name of an {@link org.apache.logging.log4j.core.Appender} to inject into JUnit 5 tests from the specified
- * configuration.
- *
- * @see LoggerContextSource
- * @since 2.14.0
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.PARAMETER)
-@Documented
-public @interface Named {
-    /**
-     * Specifies the name of the configuration item to inject. If blank, uses the name of the annotated parameter.
-     */
-    String value() default "";
-}
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/junit/ReconfigurationPolicy.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/junit/ReconfigurationPolicy.java
deleted file mode 100644
index 14c5976..0000000
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/junit/ReconfigurationPolicy.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.logging.log4j.core.junit;
-
-import org.apache.logging.log4j.core.LoggerContext;
-
-/**
- * Indicates when to {@linkplain LoggerContext#reconfigure() reconfigure} the logging system during unit tests.
- *
- * @see LoggerContextSource
- * @since 2.14.0
- */
-public enum ReconfigurationPolicy {
-    /** Performs no reconfiguration of the logging system for the entire run of tests in a test class. This is the default. */
-    NEVER,
-    /** Performs a reconfiguration before executing each test. */
-    BEFORE_EACH,
-    /** Performs a reconfiguration after executing each test. */
-    AFTER_EACH
-}
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/ConcurrentLoggingWithGelfLayoutTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/ConcurrentLoggingWithGelfLayoutTest.java
index cbf2f72..6eafb87 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/ConcurrentLoggingWithGelfLayoutTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/ConcurrentLoggingWithGelfLayoutTest.java
@@ -18,7 +18,7 @@ package org.apache.logging.log4j.core.layout;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayout2Test.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayout2Test.java
index df9f7f5..897e99c 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayout2Test.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayout2Test.java
@@ -23,9 +23,9 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.lookup.JavaLookup;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.*;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayout3Test.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayout3Test.java
index 642de54..cf430db 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayout3Test.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayout3Test.java
@@ -21,11 +21,11 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.ThreadContext;
 import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
 import org.apache.logging.log4j.test.junit.UsingAnyThreadContext;
 import org.apache.logging.log4j.message.StringMapMessage;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayoutPatternSelectorTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayoutPatternSelectorTest.java
index bb01925..042c4ef 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayoutPatternSelectorTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayoutPatternSelectorTest.java
@@ -21,11 +21,11 @@ import java.io.IOException;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.ThreadContext;
 import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
 import org.apache.logging.log4j.test.junit.UsingAnyThreadContext;
 import org.apache.logging.log4j.spi.AbstractLogger;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayoutTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayoutTest.java
index 55f59d9..dbdc7f9 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayoutTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/GelfLayoutTest.java
@@ -27,8 +27,8 @@ import org.apache.logging.log4j.core.lookup.JavaLookup;
 import org.apache.logging.log4j.core.util.KeyValuePair;
 import org.apache.logging.log4j.core.util.NetUtils;
 import org.apache.logging.log4j.test.junit.UsingAnyThreadContext;
-import org.apache.logging.log4j.test.appender.EncodingListAppender;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.EncodingListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/HtmlLayoutTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/HtmlLayoutTest.java
index 7442181..54d3347 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/HtmlLayoutTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/HtmlLayoutTest.java
@@ -46,7 +46,7 @@ import org.apache.logging.log4j.core.time.internal.format.FixedDateFormat;
 import org.apache.logging.log4j.test.junit.UsingAnyThreadContext;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.message.SimpleMessage;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/Log4j2_2195_Test.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/Log4j2_2195_Test.java
index ebc8739..42c3b97 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/Log4j2_2195_Test.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/Log4j2_2195_Test.java
@@ -23,9 +23,9 @@ import java.util.List;
 import org.apache.logging.log4j.core.Layout;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.*;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutLookupDateTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutLookupDateTest.java
index 31548dd..c1ea78f 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutLookupDateTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutLookupDateTest.java
@@ -17,9 +17,9 @@
 package org.apache.logging.log4j.core.layout;
 
 import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertFalse;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutMainMapLookupTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutMainMapLookupTest.java
index 9d7bc4b..d7416da 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutMainMapLookupTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutMainMapLookupTest.java
@@ -21,10 +21,10 @@ import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.appender.FileAppender;
 import org.apache.logging.log4j.core.lookup.MainMapLookup;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.core.junit.ReconfigurationPolicy;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.junit.ReconfigurationPolicy;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Test;
 
 import java.util.List;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutNoLookupDateTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutNoLookupDateTest.java
index c66d66b..5949cc8 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutNoLookupDateTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutNoLookupDateTest.java
@@ -17,9 +17,9 @@
 package org.apache.logging.log4j.core.layout;
 
 import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutRepeatTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutRepeatTest.java
index 9bf775d..217c878 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutRepeatTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutRepeatTest.java
@@ -17,9 +17,9 @@
 package org.apache.logging.log4j.core.layout;
 
 import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/Rfc5424LayoutTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/Rfc5424LayoutTest.java
index 54c5a5f..1bce2eb 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/Rfc5424LayoutTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/Rfc5424LayoutTest.java
@@ -35,7 +35,7 @@ import org.apache.logging.log4j.test.junit.UsingAnyThreadContext;
 import org.apache.logging.log4j.message.StructuredDataCollectionMessage;
 import org.apache.logging.log4j.message.StructuredDataMessage;
 import org.apache.logging.log4j.status.StatusLogger;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.apache.logging.log4j.core.util.ProcessIdUtil;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.jupiter.api.AfterAll;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/SyslogLayoutTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/SyslogLayoutTest.java
index dd120ef..94fee40 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/SyslogLayoutTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/SyslogLayoutTest.java
@@ -30,7 +30,7 @@ import org.apache.logging.log4j.core.config.ConfigurationFactory;
 import org.apache.logging.log4j.core.net.Facility;
 import org.apache.logging.log4j.test.junit.UsingAnyThreadContext;
 import org.apache.logging.log4j.message.StructuredDataMessage;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/ContextMapLookupTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/ContextMapLookupTest.java
index 59c911e..57421a3 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/ContextMapLookupTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/ContextMapLookupTest.java
@@ -21,7 +21,7 @@ import java.io.File;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.ThreadContext;
-import org.apache.logging.log4j.core.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.RuleChain;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/InterpolatorTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/InterpolatorTest.java
index 5fa75cf..2cf7c19 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/InterpolatorTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/InterpolatorTest.java
@@ -22,7 +22,7 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.logging.log4j.ThreadContext;
-import org.apache.logging.log4j.core.junit.JndiRule;
+import org.apache.logging.log4j.core.test.junit.JndiRule;
 import org.junit.ClassRule;
 import org.junit.Test;
 import org.junit.rules.ExternalResource;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/JndiLookupTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/JndiLookupTest.java
index 3a8b432..35b6c26 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/JndiLookupTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/JndiLookupTest.java
@@ -21,7 +21,7 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.logging.log4j.core.junit.JndiRule;
+import org.apache.logging.log4j.core.test.junit.JndiRule;
 import org.junit.Rule;
 import org.junit.Test;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/MarkerLookupConfigTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/MarkerLookupConfigTest.java
index 063dbd5..eb9b69f 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/MarkerLookupConfigTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/MarkerLookupConfigTest.java
@@ -21,7 +21,7 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.Marker;
 import org.apache.logging.log4j.MarkerManager;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/net/SocketMessageLossTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/net/SocketMessageLossTest.java
index 2d92364..c4eff4d 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/net/SocketMessageLossTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/net/SocketMessageLossTest.java
@@ -30,8 +30,8 @@ import java.util.concurrent.Future;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.appender.AppenderLoggingException;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.test.AvailablePortFinder;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.AvailablePortFinder;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/net/SocketReconnectTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/net/SocketReconnectTest.java
index cfbd1e8..49336f2 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/net/SocketReconnectTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/net/SocketReconnectTest.java
@@ -21,7 +21,7 @@ import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.appender.AppenderLoggingException;
 import org.apache.logging.log4j.core.config.Configurator;
-import org.apache.logging.log4j.test.AvailablePortFinder;
+import org.apache.logging.log4j.core.test.AvailablePortFinder;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.AfterAll;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/net/SocketTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/net/SocketTest.java
index 21a20b9..7f1145d 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/net/SocketTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/net/SocketTest.java
@@ -25,8 +25,8 @@ import java.util.concurrent.Callable;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.appender.AppenderLoggingException;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.test.AvailablePortFinder;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.AvailablePortFinder;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/CallerInformationTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/CallerInformationTest.java
index 5097d3d..0d676eb 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/CallerInformationTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/CallerInformationTest.java
@@ -20,9 +20,9 @@ import java.util.List;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.*;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/DisableAnsiTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/DisableAnsiTest.java
index ce5033c..5c504e5 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/DisableAnsiTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/DisableAnsiTest.java
@@ -18,9 +18,9 @@ package org.apache.logging.log4j.core.pattern;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ExtendedThrowableTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ExtendedThrowableTest.java
index 4aba699..e27ce2d 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ExtendedThrowableTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ExtendedThrowableTest.java
@@ -20,9 +20,9 @@ import java.util.List;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessageJansiConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessageJansiConverterTest.java
index c9b922e..f90fe13 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessageJansiConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessageJansiConverterTest.java
@@ -20,9 +20,9 @@ import java.util.List;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessageStyledConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessageStyledConverterTest.java
index 82488af..9f3ba88 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessageStyledConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessageStyledConverterTest.java
@@ -20,9 +20,9 @@ import java.util.List;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/NoConsoleNoAnsiTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/NoConsoleNoAnsiTest.java
index 60c2b90..b8e2977 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/NoConsoleNoAnsiTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/NoConsoleNoAnsiTest.java
@@ -18,9 +18,9 @@ package org.apache.logging.log4j.core.pattern;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/RegexReplacementTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/RegexReplacementTest.java
index 152f984..9a2273a 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/RegexReplacementTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/RegexReplacementTest.java
@@ -18,10 +18,10 @@ package org.apache.logging.log4j.core.pattern;
 
 import org.apache.logging.log4j.ThreadContext;
 import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
 import org.apache.logging.log4j.test.junit.UsingThreadContextMap;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.jupiter.api.Test;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/RepeatPatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/RepeatPatternConverterTest.java
index eac4c1a..ee1ed34 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/RepeatPatternConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/RepeatPatternConverterTest.java
@@ -48,4 +48,4 @@ public class RepeatPatternConverterTest {
     }
 
 
-}
\ No newline at end of file
+}
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/RootThrowableTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/RootThrowableTest.java
index 637d75b..3637796 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/RootThrowableTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/RootThrowableTest.java
@@ -18,9 +18,9 @@ package org.apache.logging.log4j.core.pattern;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Test;
 
 import java.util.List;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/SequenceNumberPatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/SequenceNumberPatternConverterTest.java
index 2c2c374..a78a444 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/SequenceNumberPatternConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/SequenceNumberPatternConverterTest.java
@@ -18,9 +18,9 @@ package org.apache.logging.log4j.core.pattern;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Test;
 
 import java.util.List;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/SequenceNumberPatternConverterZeroPaddedTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/SequenceNumberPatternConverterZeroPaddedTest.java
index 2da2996..9ad778c 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/SequenceNumberPatternConverterZeroPaddedTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/SequenceNumberPatternConverterZeroPaddedTest.java
@@ -18,9 +18,9 @@ package org.apache.logging.log4j.core.pattern;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Test;
 
 import java.util.List;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/StyleConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/StyleConverterTest.java
index bf65c23..2e8324d 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/StyleConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/StyleConverterTest.java
@@ -20,9 +20,9 @@ import java.util.List;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ThrowableTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ThrowableTest.java
index 882b458..5d0c164 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ThrowableTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ThrowableTest.java
@@ -20,9 +20,9 @@ import java.util.List;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
-import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/tools/GenerateCustomLoggerTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/tools/GenerateCustomLoggerTest.java
index 5cd9080..1db24bd 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/tools/GenerateCustomLoggerTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/tools/GenerateCustomLoggerTest.java
@@ -42,6 +42,7 @@ import org.apache.logging.log4j.message.MessageFactory;
 import org.apache.logging.log4j.test.TestLogger;
 import org.apache.logging.log4j.util.MessageSupplier;
 import org.apache.logging.log4j.util.Supplier;
+import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
@@ -50,21 +51,36 @@ import static org.junit.jupiter.api.Assertions.*;
 
 @Tag("functional")
 public class GenerateCustomLoggerTest {
+
+    private static final String TEST_SOURCE = "target/test-classes/org/apache/logging/log4j/core/MyCustomLogger.java";
     
     @BeforeAll
     public static void beforeClass() {
         System.setProperty("log4j2.loggerContextFactory", "org.apache.logging.log4j.test.TestLoggerContextFactory");
     }
 
+    @AfterAll
+    public static void afterClass() {
+        File file = new File(TEST_SOURCE);
+        File parent = file.getParentFile();
+        if (file.exists()) {
+            file.delete();
+        }
+        file = new File(parent, "MyCustomLogger.class");
+        if (file.exists()) {
+            file.delete();
+        }
+    }
+
     @Test
     public void testGenerateSource() throws Exception {
-        final String CLASSNAME = "org.myorg.MyCustomLogger";
+        final String CLASSNAME = "org.apache.logging.log4j.core.MyCustomLogger";
 
         // generate custom logger source
         final List<String> values = Arrays.asList("DEFCON1=350 DEFCON2=450 DEFCON3=550".split(" "));
         final List<Generate.LevelInfo> levels = Generate.LevelInfo.parse(values, Generate.CustomLogger.class);
         final String src = Generate.generateSource(CLASSNAME, levels, Generate.Type.CUSTOM);
-        final File f = new File("target/test-classes/org/myorg/MyCustomLogger.java");
+        final File f = new File(TEST_SOURCE);
         f.getParentFile().mkdirs();
         try (final FileOutputStream out = new FileOutputStream(f)) {
             out.write(src.getBytes(Charset.defaultCharset()));
@@ -77,9 +93,10 @@ public class GenerateCustomLoggerTest {
         try (final StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null)) {
             final Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjectsFromFiles(
                     Collections.singletonList(f));
-
+            List<String> optionList =
+                    new ArrayList<>(Arrays.asList("-classpath", System.getProperty("jdk.module.path")));
             // compile generated source
-            compiler.getTask(null, fileManager, diagnostics, null, null, compilationUnits).call();
+            compiler.getTask(null, fileManager, diagnostics, optionList, null, compilationUnits).call();
 
             // check we don't have any compilation errors
             for (final Diagnostic<? extends JavaFileObject> diagnostic : diagnostics.getDiagnostics()) {
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/tools/GenerateExtendedLoggerTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/tools/GenerateExtendedLoggerTest.java
index e9c604d..ae94617 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/tools/GenerateExtendedLoggerTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/tools/GenerateExtendedLoggerTest.java
@@ -19,14 +19,17 @@ package org.apache.logging.log4j.core.tools;
 
 import java.io.File;
 import java.io.FileOutputStream;
+import java.lang.module.ModuleReference;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.nio.charset.Charset;
+import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.Locale;
+import java.util.Set;
 
 import javax.tools.Diagnostic;
 import javax.tools.DiagnosticCollector;
@@ -43,6 +46,7 @@ import org.apache.logging.log4j.spi.ExtendedLogger;
 import org.apache.logging.log4j.test.TestLogger;
 import org.apache.logging.log4j.util.MessageSupplier;
 import org.apache.logging.log4j.util.Supplier;
+import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
@@ -51,27 +55,41 @@ import static org.junit.jupiter.api.Assertions.*;
 
 @Tag("functional")
 public class GenerateExtendedLoggerTest {
+
+    private static final String TEST_SOURCE = "target/test-classes/org/apache/logging/log4j/core/MyExtendedLogger.java";
     
     @BeforeAll
     public static void beforeClass() {
         System.setProperty("log4j2.loggerContextFactory", "org.apache.logging.log4j.test.TestLoggerContextFactory");
     }
 
+    @AfterAll
+    public static void afterClass() {
+        File file = new File(TEST_SOURCE);
+        File parent = file.getParentFile();
+        if (file.exists()) {
+            file.delete();
+        }
+        file = new File(parent, "MyExtendedLogger.class");
+        if (file.exists()) {
+            file.delete();
+        }
+    }
+
     @Test
     public void testGenerateSource() throws Exception {
-        final String CLASSNAME = "org.myorg.MyExtendedLogger";
+        final String CLASSNAME = "org.apache.logging.log4j.core.MyExtendedLogger";
 
         // generate custom logger source
         final List<String> values = Arrays.asList("DIAG=350 NOTICE=450 VERBOSE=550".split(" "));
         final List<Generate.LevelInfo> levels = Generate.LevelInfo.parse(values, Generate.ExtendedLogger.class);
         final String src = Generate.generateSource(CLASSNAME, levels, Generate.Type.EXTEND);
-        final File f = new File("target/test-classes/org/myorg/MyExtendedLogger.java");
+        final File f = new File(TEST_SOURCE);
         f.getParentFile().mkdirs();
         try (final FileOutputStream out = new FileOutputStream(f)) {
             out.write(src.getBytes(Charset.defaultCharset()));
         }
 
-        // set up compiler
         final JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
         final DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<>();
         final List<String> errors = new ArrayList<>();
@@ -79,8 +97,10 @@ public class GenerateExtendedLoggerTest {
             final Iterable<? extends JavaFileObject> compilationUnits = fileManager
                     .getJavaFileObjectsFromFiles(Collections.singletonList(f));
 
+            List<String> optionList =
+                    new ArrayList<>(Arrays.asList("-classpath", System.getProperty("jdk.module.path")));
             // compile generated source
-            compiler.getTask(null, fileManager, diagnostics, null, null, compilationUnits).call();
+            compiler.getTask(null, fileManager, diagnostics, optionList, null, compilationUnits).call();
 
             // check we don't have any compilation errors
             for (final Diagnostic<? extends JavaFileObject> diagnostic : diagnostics.getDiagnostics()) {
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/util/ContextDataProviderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/util/ContextDataProviderTest.java
index ac01cde..56b41f5 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/util/ContextDataProviderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/util/ContextDataProviderTest.java
@@ -22,7 +22,7 @@ import org.apache.logging.log4j.ThreadContext;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.config.ConfigurationFactory;
 import org.apache.logging.log4j.core.impl.ThreadContextDataInjector;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/util/ShutdownCallbackRegistryTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/util/ShutdownCallbackRegistryTest.java
index 1c39a36..199cfc3 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/util/ShutdownCallbackRegistryTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/util/ShutdownCallbackRegistryTest.java
@@ -24,7 +24,7 @@ import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.impl.Log4jContextFactory;
 import org.apache.logging.log4j.core.selector.ContextSelector;
-import org.apache.logging.log4j.core.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.apache.logging.log4j.status.StatusLogger;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/hamcrest/Descriptors.java b/log4j-core/src/test/java/org/apache/logging/log4j/hamcrest/Descriptors.java
deleted file mode 100644
index 5fe486b..0000000
--- a/log4j-core/src/test/java/org/apache/logging/log4j/hamcrest/Descriptors.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.
- */
-package org.apache.logging.log4j.hamcrest;
-
-import org.hamcrest.Description;
-import org.hamcrest.Matcher;
-import org.hamcrest.core.Is;
-
-/**
- * Grammatical descriptor decorators for Matchers.
- *
- * @since 2.1
- */
-public class Descriptors {
-    /**
-     * Decorating Matcher similar to {@code is()}, but for better grammar.
-     *
-     * @param matcher the Matcher to decorate.
-     * @param <T> the type expected by the Matcher.
-     * @return the decorated Matcher.
-     */
-    public static <T> Matcher<T> that(final Matcher<T> matcher) {
-        return new Is<T>(matcher) {
-            @Override
-            public void describeTo(final Description description) {
-                description.appendText("that ").appendDescriptionOf(matcher);
-            }
-        };
-    }
-}
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/hamcrest/MapMatchers.java b/log4j-core/src/test/java/org/apache/logging/log4j/hamcrest/MapMatchers.java
deleted file mode 100644
index 805c8a6..0000000
--- a/log4j-core/src/test/java/org/apache/logging/log4j/hamcrest/MapMatchers.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * 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.
- */
-package org.apache.logging.log4j.hamcrest;
-
-import java.util.Map;
-
-import org.hamcrest.FeatureMatcher;
-import org.hamcrest.Matcher;
-
-import static org.hamcrest.core.IsEqual.equalTo;
-
-/**
- * Hamcrest Matchers for Maps.
- *
- * @since 2.1
- */
-public final class MapMatchers {
-
-    /**
-     * Returns a Map Matcher matching on the size of a Map.
-     *
-     * @param matcher the Matcher to match against the Map size.
-     * @param <K>     the key type.
-     * @param <V>     the value type.
-     */
-    public static <K, V> Matcher<Map<? extends K, ? extends V>> hasSize(final Matcher<Integer> matcher) {
-        return new FeatureMatcher<Map<? extends K, ? extends V>, Integer>(matcher, "map with size", "map with size") {
-            @Override
-            protected Integer featureValueOf(final Map<? extends K, ? extends V> actual) {
-                return actual.size();
-            }
-        };
-    }
-
-    /**
-     * Returns a Map Matcher matching on the exact size of a Map.
-     *
-     * @param size the number of entries to match the Map against.
-     * @param <K>  the key type.
-     * @param <V>  the value type.
-     */
-    public static <K, V> Matcher<Map<? extends K, ? extends V>> hasSize(final int size) {
-        return hasSize(equalTo(size));
-    }
-
-    private MapMatchers() {
-    }
-}
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/junit/AppenderResolver.java b/log4j-core/src/test/java/org/apache/logging/log4j/junit/AppenderResolver.java
deleted file mode 100644
index cc2f2d4..0000000
--- a/log4j-core/src/test/java/org/apache/logging/log4j/junit/AppenderResolver.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.logging.log4j.junit;
-
-import org.apache.logging.log4j.core.Appender;
-import org.apache.logging.log4j.core.LoggerContext;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.api.extension.ParameterContext;
-import org.junit.jupiter.api.extension.ParameterResolutionException;
-import org.junit.jupiter.api.extension.ParameterResolver;
-
-import static org.apache.logging.log4j.junit.LoggerContextResolver.getParameterLoggerContext;
-
-class AppenderResolver implements ParameterResolver {
-    @Override
-    public boolean supportsParameter(
-            ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
-        return Appender.class.isAssignableFrom(parameterContext.getParameter().getType()) && parameterContext
-                .isAnnotated(Named.class);
-    }
-
-    @Override
-    public Object resolveParameter(
-            ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
-        final LoggerContext loggerContext = getParameterLoggerContext(parameterContext, extensionContext);
-        if (loggerContext == null) {
-            throw new ParameterResolutionException("No LoggerContext defined");
-        }
-        final String name = parameterContext.findAnnotation(Named.class)
-                .map(Named::value)
-                .map(s -> s.isEmpty() ? parameterContext.getParameter().getName() : s)
-                .orElseThrow(() -> new ParameterResolutionException("No @Named present after checking earlier"));
-        final Appender appender = loggerContext.getConfiguration().getAppender(name);
-        if (appender == null) {
-            throw new ParameterResolutionException("No appender named " + name);
-        }
-        return appender;
-    }
-}
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/junit/JndiRule.java b/log4j-core/src/test/java/org/apache/logging/log4j/junit/JndiRule.java
deleted file mode 100644
index 7638d2c..0000000
--- a/log4j-core/src/test/java/org/apache/logging/log4j/junit/JndiRule.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * 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.
- */
-package org.apache.logging.log4j.junit;
-
-import java.util.Collections;
-import java.util.Map;
-import javax.naming.Context;
-
-import org.junit.rules.TestRule;
-import org.junit.runner.Description;
-import org.junit.runners.model.Statement;
-import org.springframework.mock.jndi.SimpleNamingContextBuilder;
-
-/**
- * JUnit rule to create a mock {@link Context} and bind an object to a name.
- *
- * @since 2.8
- */
-public class JndiRule implements TestRule {
-
-    private final Map<String, Object> initialBindings;
-
-    public JndiRule(final String name, final Object value) {
-        this.initialBindings = Collections.singletonMap(name, value);
-    }
-
-    public JndiRule(final Map<String, Object> initialBindings) {
-        this.initialBindings = initialBindings;
-    }
-
-    @Override
-    public Statement apply(final Statement base, final Description description) {
-        return new Statement() {
-            @Override
-            public void evaluate() throws Throwable {
-                final SimpleNamingContextBuilder builder = SimpleNamingContextBuilder.emptyActivatedContextBuilder();
-                for (final Map.Entry<String, Object> entry : initialBindings.entrySet()) {
-                    builder.bind(entry.getKey(), entry.getValue());
-                }
-                base.evaluate();
-            }
-        };
-    }
-
-}
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/junit/LoggerContextRule.java b/log4j-core/src/test/java/org/apache/logging/log4j/junit/LoggerContextRule.java
deleted file mode 100644
index 5707e21..0000000
--- a/log4j-core/src/test/java/org/apache/logging/log4j/junit/LoggerContextRule.java
+++ /dev/null
@@ -1,319 +0,0 @@
-/*
- * 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.
- */
-package org.apache.logging.log4j.junit;
-
-import java.util.concurrent.TimeUnit;
-
-import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.core.AbstractLifeCycle;
-import org.apache.logging.log4j.core.Appender;
-import org.apache.logging.log4j.core.Logger;
-import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.LoggerContextAccessor;
-import org.apache.logging.log4j.core.config.Configuration;
-import org.apache.logging.log4j.core.config.Configurator;
-import org.apache.logging.log4j.core.selector.ContextSelector;
-import org.apache.logging.log4j.core.util.Constants;
-import org.apache.logging.log4j.status.StatusLogger;
-import org.apache.logging.log4j.test.appender.ListAppender;
-import org.apache.logging.log4j.test.junit.CleanFiles;
-import org.apache.logging.log4j.test.junit.CleanFolders;
-import org.junit.rules.RuleChain;
-import org.junit.rules.TestRule;
-import org.junit.runner.Description;
-import org.junit.runners.model.Statement;
-
-import static org.junit.Assert.*;
-
-/**
- * JUnit {@link TestRule} for constructing a new LoggerContext using a specified configuration file. If the system
- * property {@code EBUG} is set (e.g., through the command line option {@code -DEBUG}), then the StatusLogger will be
- * set to the debug level. This allows for more debug messages as the StatusLogger will be in the error level until a
- * configuration file has been read and parsed into a tree of Nodes.
- *
- * @see LoggerContextSource
- * @see Named
- */
-public class LoggerContextRule implements TestRule, LoggerContextAccessor {
-
-    public static LoggerContextRule createShutdownTimeoutLoggerContextRule(final String config) {
-        return new LoggerContextRule(config, 10, TimeUnit.SECONDS);
-    }
-    
-    private static final String SYS_PROP_KEY_CLASS_NAME = "org.apache.logging.log4j.junit.LoggerContextRule#ClassName";
-    private static final String SYS_PROP_KEY_DISPLAY_NAME = "org.apache.logging.log4j.junit.LoggerContextRule#DisplayName";
-    private final String configurationLocation;
-    private LoggerContext loggerContext;
-    private Class<? extends ContextSelector> contextSelectorClass;
-    private String testClassName;
-    private final long shutdownTimeout;
-    private final TimeUnit shutdownTimeUnit;
-
-    /**
-     * Constructs a new LoggerContextRule without a configuration file.
-     */
-    public LoggerContextRule() {
-        this(null, null);
-    }
-
-    /**
-     * Constructs a new LoggerContextRule for a given configuration file.
-     *
-     * @param configurationLocation
-     *            path to configuration file
-     */
-    public LoggerContextRule(final String configurationLocation) {
-        this(configurationLocation, null);
-    }
-
-    /**
-     * Constructs a new LoggerContextRule for a given configuration file and a custom {@link ContextSelector} class.
-     *
-     * @param configurationLocation
-     *            path to configuration file
-     * @param contextSelectorClass
-     *            custom ContextSelector class to use instead of default
-     */
-    public LoggerContextRule(final String configurationLocation, final Class<? extends ContextSelector> contextSelectorClass) {
-        this(configurationLocation, contextSelectorClass, AbstractLifeCycle.DEFAULT_STOP_TIMEOUT,
-                AbstractLifeCycle.DEFAULT_STOP_TIMEUNIT);
-    }
-
-    public LoggerContextRule(final String configurationLocation, final Class<? extends ContextSelector> contextSelectorClass,
-            final long shutdownTimeout, final TimeUnit shutdownTimeUnit) {
-        this.configurationLocation = configurationLocation;
-        this.contextSelectorClass = contextSelectorClass;
-        this.shutdownTimeout = shutdownTimeout;
-        this.shutdownTimeUnit = shutdownTimeUnit;
-    }
-
-    public LoggerContextRule(final String configurationLocation, final int shutdownTimeout, final TimeUnit shutdownTimeUnit) {
-        this(configurationLocation, null, shutdownTimeout, shutdownTimeUnit);
-    }
-
-    @Override
-    public Statement apply(final Statement base, final Description description) {
-        // Hack: Using -DEBUG as a JVM param sets a property called "EBUG"...
-        if (System.getProperties().containsKey("EBUG")) {
-            StatusLogger.getLogger().setLevel(Level.DEBUG);
-        }
-        testClassName = description.getClassName();
-        return new Statement() {
-            @Override
-            public void evaluate() throws Throwable {
-                if (contextSelectorClass != null) {
-                    System.setProperty(Constants.LOG4J_CONTEXT_SELECTOR, contextSelectorClass.getName());
-                }
-                // TODO Consider instead of the above:
-                // LogManager.setFactory(new Log4jContextFactory(LoaderUtil.newInstanceOf(contextSelectorClass)));
-                System.setProperty(SYS_PROP_KEY_CLASS_NAME, description.getClassName());
-                System.setProperty(SYS_PROP_KEY_DISPLAY_NAME, description.getDisplayName());
-                loggerContext = Configurator.initialize(description.getDisplayName(),
-                        description.getTestClass().getClassLoader(), configurationLocation);
-                try {
-                    base.evaluate();
-                } finally {
-                    if (!Configurator.shutdown(loggerContext, shutdownTimeout, shutdownTimeUnit)) {
-                        StatusLogger.getLogger().error("Logger context {} did not shutdown completely after {} {}.",
-                                loggerContext.getName(), shutdownTimeout, shutdownTimeUnit);
-                    }
-                    loggerContext = null;
-                    contextSelectorClass = null;
-                    StatusLogger.getLogger().reset();
-                    System.clearProperty(Constants.LOG4J_CONTEXT_SELECTOR);
-                    System.clearProperty(SYS_PROP_KEY_CLASS_NAME);
-                    System.clearProperty(SYS_PROP_KEY_DISPLAY_NAME);
-                }
-            }
-        };
-
-    }
-
-    /**
-     * Gets a named Appender for this LoggerContext.
-     *
-     * @param name
-     *            the name of the Appender to look up.
-     * @return the named Appender or {@code null} if it wasn't defined in the configuration.
-     */
-    @SuppressWarnings("unchecked") // Assume the call site knows what it is doing.
-     public <T extends Appender> T getAppender(final String name) {
-         return (T) getConfiguration().getAppenders().get(name);
-     }
-
-    /**
-     * Gets a named Appender for this LoggerContext.
-     *
-     * @param <T>
-     *            The target Appender class
-     * @param name
-     *            the name of the Appender to look up.
-     * @param cls
-     *            The target Appender class
-     * @return the named Appender or {@code null} if it wasn't defined in the configuration.
-     */
-    public <T extends Appender> T getAppender(final String name, final Class<T> cls) {
-        return cls.cast(getConfiguration().getAppenders().get(name));
-    }
-
-    /**
-     * Gets the associated Configuration for the configuration file this was constructed with.
-     *
-     * @return this LoggerContext's Configuration.
-     */
-    public Configuration getConfiguration() {
-        return loggerContext.getConfiguration();
-    }
-
-    /**
-     * Gets the configuration location.
-     * 
-     * @return the configuration location.
-     */
-    public String getConfigurationLocation() {
-        return configurationLocation;
-    }
-
-    /**
-     * Gets the current LoggerContext associated with this rule.
-     *
-     * @return the current LoggerContext.
-     */
-    @Override
-    public LoggerContext getLoggerContext() {
-        return loggerContext;
-    }
-
-    /**
-     * Gets a named ListAppender or throws an exception for this LoggerContext.
-     *
-     * @param name
-     *            the name of the ListAppender to look up.
-     * @return the named ListAppender.
-     * @throws AssertionError
-     *             if the named ListAppender doesn't exist or isn't a ListAppender.
-     */
-    public ListAppender getListAppender(final String name) {
-        final Appender appender = getAppender(name);
-        if (appender instanceof ListAppender) {
-            return (ListAppender) appender;
-        }
-        throw new AssertionError("No ListAppender named " + name + " found.");
-    }
-
-    /**
-     * Gets a named Logger using the test class's name from this LoggerContext.
-     *
-     * @return the test class's named Logger.
-     */
-    public Logger getLogger() {
-        return loggerContext.getLogger(testClassName);
-    }
-
-    /**
-     * Gets a named Logger for the given class in this LoggerContext.
-     *
-     * @param clazz
-     *            The Class whose name should be used as the Logger name. If null it will default to the calling class.
-     * @return the named Logger.
-     */
-    public Logger getLogger(final Class<?> clazz) {
-        return loggerContext.getLogger(clazz.getName());
-    }
-
-    /**
-     * Gets a named Logger in this LoggerContext.
-     *
-     * @param name
-     *            the name of the Logger to look up or create.
-     * @return the named Logger.
-     */
-    public Logger getLogger(final String name) {
-        return loggerContext.getLogger(name);
-    }
-
-    /**
-     * Gets a named Appender or throws an exception for this LoggerContext.
-     *
-     * @param name
-     *            the name of the Appender to look up.
-     * @return the named Appender.
-     * @throws AssertionError
-     *             if the Appender doesn't exist.
-     */
-    public Appender getRequiredAppender(final String name) {
-        final Appender appender = getAppender(name);
-        assertNotNull("Appender named " + name + " was null.", appender);
-        return appender;
-    }
-
-    /**
-     * Gets a named Appender or throws an exception for this LoggerContext.
-     *
-     * @param <T>
-     *            The target Appender class
-     * @param name
-     *            the name of the Appender to look up.
-     * @param cls
-     *            The target Appender class
-     * @return the named Appender.
-     * @throws AssertionError
-     *             if the Appender doesn't exist.
-     */
-    public <T extends Appender> T getRequiredAppender(final String name, final Class<T> cls) {
-        final T appender = getAppender(name, cls);
-        assertNotNull("Appender named " + name + " was null in logger context " + loggerContext, appender);
-        return appender;
-    }
-
-    /**
-     * Gets the root logger.
-     *
-     * @return the root logger.
-     */
-    public Logger getRootLogger() {
-        return loggerContext.getRootLogger();
-    }
-
-    public void reconfigure() {
-        loggerContext.reconfigure();
-    }
-    
-    @Override
-    public String toString() {
-        final StringBuilder builder = new StringBuilder();
-        builder.append("LoggerContextRule [configLocation=");
-        builder.append(configurationLocation);
-        builder.append(", contextSelectorClass=");
-        builder.append(contextSelectorClass);
-        builder.append("]");
-        return builder.toString();
-    }
-
-    public RuleChain withCleanFilesRule(final String... files) {
-        return RuleChain.outerRule(new CleanFiles(files)).around(this);
-    }
-
-    public RuleChain withCleanFoldersRule(final boolean before, final boolean after, final int maxTries, final String... folders) {
-        return RuleChain.outerRule(new CleanFolders(before, after, maxTries, folders)).around(this);
-    }
-
-    public RuleChain withCleanFoldersRule(final String... folders) {
-        return RuleChain.outerRule(new CleanFolders(folders)).around(this);
-    }
-
-}
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/junit/LoggerContextSource.java b/log4j-core/src/test/java/org/apache/logging/log4j/junit/LoggerContextSource.java
deleted file mode 100644
index e0cba27..0000000
--- a/log4j-core/src/test/java/org/apache/logging/log4j/junit/LoggerContextSource.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.logging.log4j.junit;
-
-import org.apache.logging.log4j.core.Appender;
-import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.config.Configuration;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.extension.ExtendWith;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Specifies a configuration file to use for unit tests. This configuration file will be loaded once and used for all tests
- * executed in the annotated test class unless otherwise specified by {@link #reconfigure()}. When annotated on a test method,
- * this will override the class-level configuration if provided for that method. By using this JUnit 5 extension, the following
- * types can be injected into tests via constructor or method parameters:
- *
- * <ul>
- *     <li>{@link LoggerContext};</li>
- *     <li>{@link Configuration};</li>
- *     <li>any subclass of {@link Appender} paired with a {@link Named} annotation to select the appender by name.</li>
- * </ul>
- *
- * Tests using this extension will automatically be tagged as {@code functional} to indicate they perform functional tests that
- * rely on configuration files and production code.
- *
- * @since 2.14.0
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ElementType.TYPE, ElementType.METHOD})
-@Documented
-@Inherited
-@Tag("functional")
-@ExtendWith(LoggerContextResolver.class)
-@ExtendWith(ConfigurationResolver.class)
-@ExtendWith(AppenderResolver.class)
-public @interface LoggerContextSource {
-    /**
-     * Specifies the name of the configuration file to use for the annotated test.
-     */
-    String value();
-
-    /**
-     * Specifies when to {@linkplain LoggerContext#reconfigure() reconfigure} the logging system.
-     */
-    ReconfigurationPolicy reconfigure() default ReconfigurationPolicy.NEVER;
-
-    /**
-     * Specifies the shutdown timeout limit. Defaults to 0 to mean no limit.
-     */
-    long timeout() default 0L;
-
-    /**
-     * Specifies the time unit {@link #timeout()} is measured in.
-     */
-    TimeUnit unit() default TimeUnit.SECONDS;
-}
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/message/MutableLogEventWithReusableParamMsgTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/message/MutableLogEventWithReusableParamMsgTest.java
deleted file mode 100644
index e5f5973..0000000
--- a/log4j-core/src/test/java/org/apache/logging/log4j/message/MutableLogEventWithReusableParamMsgTest.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * 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.
- */
-package org.apache.logging.log4j.message;
-
-import org.apache.logging.log4j.core.impl.MutableLogEvent;
-import org.junit.jupiter.api.Test;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.IsSame.sameInstance;
-
-/**
- * LOG4J2-1409
- */
-// test must be in log4j-core but in org.apache.logging.log4j.message package because it calls package-private methods
-public class MutableLogEventWithReusableParamMsgTest {
-    @Test
-    public void testInteractionWithReusableParameterizedMessage() {
-        final MutableLogEvent evt = new MutableLogEvent();
-        final ReusableParameterizedMessage msg = new ReusableParameterizedMessage();
-        msg.set("Hello {} {} {}", 1, 2, 3);
-        evt.setMessage(msg);
-        evt.clear();
-
-        msg.set("Hello {}", new Object[]{1});
-        evt.setMessage(msg);
-        evt.clear();
-
-        msg.set("Hello {}", 1);
-        evt.setMessage(msg);
-        evt.clear();
-
-        // Uncomment out this log event and the params gets reset correctly (No exception occurs)
-        //        msg.set("Hello {}", 1);
-        //        evt.setMessage(msg);
-        //        evt.clear();
-
-        // Exception at this log event - as the params is set to 1!
-        msg.set("Hello {} {} {}", 1, 2, 3);
-        evt.setMessage(msg);
-        evt.clear();
-
-        Message mementoMessage = evt.memento();
-        Message mementoMessageSecondInvocation = evt.memento();
-        // MutableLogEvent.memento should be cached
-        assertThat(mementoMessage, sameInstance(mementoMessageSecondInvocation));
-    }
-}
diff --git a/log4j-core/src/test/java9/module-info.java b/log4j-core/src/test/java9/module-info.java
new file mode 100644
index 0000000..0df50d8
--- /dev/null
+++ b/log4j-core/src/test/java9/module-info.java
@@ -0,0 +1,92 @@
+/*
+ * 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.
+ */
+open module org.apache.logging.log4j.core {
+    exports org.apache.logging.log4j.core;
+    exports org.apache.logging.log4j.core.appender;
+    exports org.apache.logging.log4j.core.appender.db;
+    exports org.apache.logging.log4j.core.appender.nosql;
+    exports org.apache.logging.log4j.core.appender.rewrite;
+    exports org.apache.logging.log4j.core.appender.rolling;
+    exports org.apache.logging.log4j.core.appender.rolling.action;
+    exports org.apache.logging.log4j.core.appender.routing;
+    exports org.apache.logging.log4j.core.async;
+    exports org.apache.logging.log4j.core.config;
+    exports org.apache.logging.log4j.core.config.arbiters;
+    exports org.apache.logging.log4j.core.config.builder;
+    exports org.apache.logging.log4j.core.config.plugins;
+    exports org.apache.logging.log4j.core.config.plugins.convert;
+    exports org.apache.logging.log4j.core.config.plugins.util;
+    exports org.apache.logging.log4j.core.config.plugins.validation.validators;
+    exports org.apache.logging.log4j.core.config.properties;
+    exports org.apache.logging.log4j.core.config.xml;
+    exports org.apache.logging.log4j.core.filter;
+    exports org.apache.logging.log4j.core.impl;
+    exports org.apache.logging.log4j.core.jmx;
+    exports org.apache.logging.log4j.core.layout;
+    exports org.apache.logging.log4j.core.lookup;
+    exports org.apache.logging.log4j.core.message;
+    exports org.apache.logging.log4j.core.net;
+    exports org.apache.logging.log4j.core.net.ssl;
+    exports org.apache.logging.log4j.core.parser;
+    exports org.apache.logging.log4j.core.pattern;
+    exports org.apache.logging.log4j.core.script;
+    exports org.apache.logging.log4j.core.selector;
+    exports org.apache.logging.log4j.core.test;
+    exports org.apache.logging.log4j.core.test.appender;
+    exports org.apache.logging.log4j.core.test.hamcrest;
+    exports org.apache.logging.log4j.core.test.junit;
+    exports org.apache.logging.log4j.core.time;
+    exports org.apache.logging.log4j.core.tools;
+    exports org.apache.logging.log4j.core.util;
+
+    requires transitive java.compiler;
+    requires transitive java.desktop;
+    requires transitive java.management;
+    requires transitive java.naming;
+    requires transitive java.sql;
+    requires transitive java.rmi;
+    requires transitive java.scripting;
+    requires transitive java.xml;
+    requires transitive org.apache.logging.log4j;
+    requires transitive org.apache.logging.log4j.test;
+    requires transitive org.apache.logging.log4j.plugins;
+    requires transitive org.apache.logging.log4j.plugins.test;
+    requires transitive com.lmax.disruptor;
+    requires transitive org.jctools.core;
+    requires transitive org.osgi.framework;
+    requires transitive com.conversantmedia.disruptor;
+    requires com.fasterxml.jackson.core;
+    requires com.fasterxml.jackson.databind;
+    requires transitive com.fasterxml.jackson.dataformat.xml;
+    requires transitive com.fasterxml.jackson.dataformat.yaml;
+    requires transitive org.apache.commons.compress;
+    requires transitive org.fusesource.jansi;
+    requires transitive org.junit.jupiter.api;
+    requires transitive org.junit.jupiter.engine;
+    requires transitive org.junit.jupiter.params;
+    requires transitive org.junit.platform.commons;
+    requires transitive org.junit.platform.engine;
+    requires transitive junit;
+
+    uses org.apache.logging.log4j.core.util.ContextDataProvider;
+    uses org.apache.logging.log4j.core.util.WatchEventService;
+    provides org.apache.logging.log4j.message.ThreadDumpMessage.ThreadInfoFactory with org.apache.logging.log4j.core.message.ExtendedThreadInfoFactory;
+    provides org.apache.logging.log4j.core.util.ContextDataProvider with org.apache.logging.log4j.core.impl.ThreadContextDataProvider;
+    provides org.apache.logging.log4j.spi.Provider with org.apache.logging.log4j.core.impl.Log4jProvider;
+    provides org.apache.logging.log4j.plugins.processor.PluginService with org.apache.logging.log4j.core.plugins.Log4jPlugins,
+            org.apache.logging.log4j.core.test.plugins.Log4jPlugins;
+}
diff --git a/log4j-core/src/test/resources/gcFreeMixedSyncAsyncLogging.xml b/log4j-core/src/test/resources/gcFreeMixedSyncAsyncLogging.xml
index e85894c..990328f 100644
--- a/log4j-core/src/test/resources/gcFreeMixedSyncAsyncLogging.xml
+++ b/log4j-core/src/test/resources/gcFreeMixedSyncAsyncLogging.xml
@@ -69,7 +69,7 @@
     </RandomAccessFile>
   </Appenders>
   <Loggers>
-    <AsyncLogger name="org.apache.logging.log4j.core.GcFreeMixedSyncAyncLoggingTest"
+    <AsyncLogger name="org.apache.logging.log4j.core.test.gc.GcFreeMixedSyncAyncLoggingTest"
         level="trace" includeLocation="false">
       <Property name="prop1">value1</Property>
       <Property name="prop2">value2</Property>
diff --git a/log4j-csv/src/test/java/org/apache/logging/log4j/csv/layout/CsvLogEventLayoutTest.java b/log4j-csv/src/test/java/org/apache/logging/log4j/csv/layout/CsvLogEventLayoutTest.java
index a4e06ad..d637f23 100644
--- a/log4j-csv/src/test/java/org/apache/logging/log4j/csv/layout/CsvLogEventLayoutTest.java
+++ b/log4j-csv/src/test/java/org/apache/logging/log4j/csv/layout/CsvLogEventLayoutTest.java
@@ -31,7 +31,7 @@ import org.apache.logging.log4j.core.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.config.ConfigurationFactory;
 import org.apache.logging.log4j.test.junit.ThreadContextRule;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.AfterClass;
 import org.junit.Assert;
 import org.junit.BeforeClass;
diff --git a/log4j-csv/src/test/java/org/apache/logging/log4j/csv/layout/CsvParameterLayoutTest.java b/log4j-csv/src/test/java/org/apache/logging/log4j/csv/layout/CsvParameterLayoutTest.java
index cb600a5..aab0ef1 100644
--- a/log4j-csv/src/test/java/org/apache/logging/log4j/csv/layout/CsvParameterLayoutTest.java
+++ b/log4j-csv/src/test/java/org/apache/logging/log4j/csv/layout/CsvParameterLayoutTest.java
@@ -35,7 +35,7 @@ import org.apache.logging.log4j.core.Logger;
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
 import org.apache.logging.log4j.test.junit.ThreadContextRule;
 import org.apache.logging.log4j.message.ObjectArrayMessage;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumeAppenderTest.java b/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumeAppenderTest.java
index 2e1cda1..95c9c56 100644
--- a/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumeAppenderTest.java
+++ b/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumeAppenderTest.java
@@ -47,7 +47,7 @@ import org.apache.logging.log4j.core.Appender;
 import org.apache.logging.log4j.core.Logger;
 import org.apache.logging.log4j.message.StructuredDataMessage;
 import org.apache.logging.log4j.status.StatusLogger;
-import org.apache.logging.log4j.test.AvailablePortFinder;
+import org.apache.logging.log4j.core.test.AvailablePortFinder;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
diff --git a/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedAgentTest.java b/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedAgentTest.java
index 1b314df..df3c8eb 100644
--- a/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedAgentTest.java
+++ b/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedAgentTest.java
@@ -50,7 +50,7 @@ import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.config.ConfigurationFactory;
 import org.apache.logging.log4j.message.StructuredDataMessage;
 import org.apache.logging.log4j.status.StatusLogger;
-import org.apache.logging.log4j.test.AvailablePortFinder;
+import org.apache.logging.log4j.core.test.AvailablePortFinder;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Assert;
diff --git a/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedAppenderTest.java b/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedAppenderTest.java
index e179b0c..5a01f0f 100644
--- a/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedAppenderTest.java
+++ b/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedAppenderTest.java
@@ -50,7 +50,7 @@ import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.config.ConfigurationFactory;
 import org.apache.logging.log4j.message.StructuredDataMessage;
 import org.apache.logging.log4j.status.StatusLogger;
-import org.apache.logging.log4j.test.AvailablePortFinder;
+import org.apache.logging.log4j.core.test.AvailablePortFinder;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Assert;
diff --git a/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumePersistentAppenderTest.java b/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumePersistentAppenderTest.java
index 49c0ce0..9a37493 100644
--- a/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumePersistentAppenderTest.java
+++ b/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumePersistentAppenderTest.java
@@ -54,7 +54,7 @@ import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.config.ConfigurationFactory;
 import org.apache.logging.log4j.message.StructuredDataMessage;
 import org.apache.logging.log4j.status.StatusLogger;
-import org.apache.logging.log4j.test.AvailablePortFinder;
+import org.apache.logging.log4j.core.test.AvailablePortFinder;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Assert;
diff --git a/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumePersistentPerf.java b/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumePersistentPerf.java
index 4a3c723..9dd0eae 100644
--- a/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumePersistentPerf.java
+++ b/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumePersistentPerf.java
@@ -48,7 +48,7 @@ import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.config.ConfigurationFactory;
 import org.apache.logging.log4j.message.StructuredDataMessage;
 import org.apache.logging.log4j.status.StatusLogger;
-import org.apache.logging.log4j.test.AvailablePortFinder;
+import org.apache.logging.log4j.core.test.AvailablePortFinder;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
diff --git a/log4j-iostreams/src/test/java/org/apache/logging/log4j/io/IoBuilderCallerInfoTesting.java b/log4j-iostreams/src/test/java/org/apache/logging/log4j/io/IoBuilderCallerInfoTesting.java
index 8602d0e..25ff9ce 100644
--- a/log4j-iostreams/src/test/java/org/apache/logging/log4j/io/IoBuilderCallerInfoTesting.java
+++ b/log4j-iostreams/src/test/java/org/apache/logging/log4j/io/IoBuilderCallerInfoTesting.java
@@ -19,7 +19,7 @@ package org.apache.logging.log4j.io;
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.Logger;
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.Before;
 import org.junit.ClassRule;
 
diff --git a/log4j-iostreams/src/test/java/org/apache/logging/log4j/io/IoBuilderTest.java b/log4j-iostreams/src/test/java/org/apache/logging/log4j/io/IoBuilderTest.java
index 64e1937..09a436d 100644
--- a/log4j-iostreams/src/test/java/org/apache/logging/log4j/io/IoBuilderTest.java
+++ b/log4j-iostreams/src/test/java/org/apache/logging/log4j/io/IoBuilderTest.java
@@ -26,7 +26,7 @@ import java.io.PrintStream;
 import java.util.List;
 
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.ClassRule;
 import org.junit.Test;
 
diff --git a/log4j-iostreams/src/test/java/org/apache/logging/log4j/io/LoggerPrintWriterJdbcH2Test.java b/log4j-iostreams/src/test/java/org/apache/logging/log4j/io/LoggerPrintWriterJdbcH2Test.java
index 4495b4d..51cc121 100644
--- a/log4j-iostreams/src/test/java/org/apache/logging/log4j/io/LoggerPrintWriterJdbcH2Test.java
+++ b/log4j-iostreams/src/test/java/org/apache/logging/log4j/io/LoggerPrintWriterJdbcH2Test.java
@@ -23,7 +23,7 @@ import java.sql.SQLException;
 
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.apache.logging.log4j.util.Strings;
 import org.h2.jdbcx.JdbcDataSource;
 import org.junit.Assert;
diff --git a/log4j-jcl/src/test/java/org/apache/logging/log4j/jcl/CallerInformationTest.java b/log4j-jcl/src/test/java/org/apache/logging/log4j/jcl/CallerInformationTest.java
index 9692990..e9bb5de 100644
--- a/log4j-jcl/src/test/java/org/apache/logging/log4j/jcl/CallerInformationTest.java
+++ b/log4j-jcl/src/test/java/org/apache/logging/log4j/jcl/CallerInformationTest.java
@@ -23,7 +23,7 @@ import java.util.List;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.ClassRule;
 import org.junit.Test;
 
diff --git a/log4j-jcl/src/test/java/org/apache/logging/log4j/jcl/LoggerTest.java b/log4j-jcl/src/test/java/org/apache/logging/log4j/jcl/LoggerTest.java
index 9b628e1..2e53841 100644
--- a/log4j-jcl/src/test/java/org/apache/logging/log4j/jcl/LoggerTest.java
+++ b/log4j-jcl/src/test/java/org/apache/logging/log4j/jcl/LoggerTest.java
@@ -21,7 +21,7 @@ import java.util.List;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.ClassRule;
 import org.junit.Test;
diff --git a/log4j-jdbc/src/test/java/org/apache/logging/log4j/jdbc/appender/JdbcAppenderColumnMappingLiteralTest.java b/log4j-jdbc/src/test/java/org/apache/logging/log4j/jdbc/appender/JdbcAppenderColumnMappingLiteralTest.java
index d209478..92f4b83 100644
--- a/log4j-jdbc/src/test/java/org/apache/logging/log4j/jdbc/appender/JdbcAppenderColumnMappingLiteralTest.java
+++ b/log4j-jdbc/src/test/java/org/apache/logging/log4j/jdbc/appender/JdbcAppenderColumnMappingLiteralTest.java
@@ -29,7 +29,7 @@ import java.sql.Statement;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.RuleChainFactory;
+import org.apache.logging.log4j.core.test.RuleChainFactory;
 import org.h2.util.IOUtils;
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/log4j-jdbc/src/test/java/org/apache/logging/log4j/jdbc/appender/JdbcAppenderColumnMappingPatternTest.java b/log4j-jdbc/src/test/java/org/apache/logging/log4j/jdbc/appender/JdbcAppenderColumnMappingPatternTest.java
index be93d2a..00cbf4d 100644
--- a/log4j-jdbc/src/test/java/org/apache/logging/log4j/jdbc/appender/JdbcAppenderColumnMappingPatternTest.java
+++ b/log4j-jdbc/src/test/java/org/apache/logging/log4j/jdbc/appender/JdbcAppenderColumnMappingPatternTest.java
@@ -29,7 +29,7 @@ import java.sql.Statement;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.RuleChainFactory;
+import org.apache.logging.log4j.core.test.RuleChainFactory;
 import org.h2.util.IOUtils;
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/log4j-jpl/pom.xml b/log4j-jpl/pom.xml
index 5e67974..b7c1b58 100644
--- a/log4j-jpl/pom.xml
+++ b/log4j-jpl/pom.xml
@@ -53,7 +53,7 @@
     </dependency>
     <dependency>
       <groupId>org.osgi</groupId>
-      <artifactId>org.osgi.core</artifactId>
+      <artifactId>org.osgi.framework</artifactId>
       <scope>provided</scope>
     </dependency>
     <dependency>
diff --git a/log4j-jpl/src/test/java/org/apache/logging/log4j/jpl/Log4jSystemLoggerTest.java b/log4j-jpl/src/test/java/org/apache/logging/log4j/jpl/Log4jSystemLoggerTest.java
index ccc4b3c..6d1b844 100644
--- a/log4j-jpl/src/test/java/org/apache/logging/log4j/jpl/Log4jSystemLoggerTest.java
+++ b/log4j-jpl/src/test/java/org/apache/logging/log4j/jpl/Log4jSystemLoggerTest.java
@@ -30,7 +30,7 @@ import java.util.List;
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
diff --git a/log4j-jul/src/test/java/org/apache/logging/log4j/jul/AbstractLoggerTest.java b/log4j-jul/src/test/java/org/apache/logging/log4j/jul/AbstractLoggerTest.java
index a90c338..2637652 100644
--- a/log4j-jul/src/test/java/org/apache/logging/log4j/jul/AbstractLoggerTest.java
+++ b/log4j-jul/src/test/java/org/apache/logging/log4j/jul/AbstractLoggerTest.java
@@ -23,7 +23,7 @@ import java.util.logging.Logger;
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.Test;
 
 import static org.assertj.core.api.Assertions.assertThat;
diff --git a/log4j-jul/src/test/java/org/apache/logging/log4j/jul/ApiLoggerTest.java b/log4j-jul/src/test/java/org/apache/logging/log4j/jul/ApiLoggerTest.java
index 0f2c830..942b70a 100644
--- a/log4j-jul/src/test/java/org/apache/logging/log4j/jul/ApiLoggerTest.java
+++ b/log4j-jul/src/test/java/org/apache/logging/log4j/jul/ApiLoggerTest.java
@@ -24,7 +24,7 @@ import static org.junit.Assert.assertThat;
 
 import java.util.logging.Logger;
 
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
diff --git a/log4j-jul/src/test/java/org/apache/logging/log4j/jul/BracketInNotInterpolatedMessageTest.java b/log4j-jul/src/test/java/org/apache/logging/log4j/jul/BracketInNotInterpolatedMessageTest.java
index 951976b..598cb84 100644
--- a/log4j-jul/src/test/java/org/apache/logging/log4j/jul/BracketInNotInterpolatedMessageTest.java
+++ b/log4j-jul/src/test/java/org/apache/logging/log4j/jul/BracketInNotInterpolatedMessageTest.java
@@ -21,7 +21,7 @@ import java.util.logging.LogRecord;
 import java.util.logging.Logger;
 
 import org.apache.logging.log4j.core.LogEvent;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
diff --git a/log4j-jul/src/test/java/org/apache/logging/log4j/jul/CallerInformationTest.java b/log4j-jul/src/test/java/org/apache/logging/log4j/jul/CallerInformationTest.java
index 4a1844c..3290749 100644
--- a/log4j-jul/src/test/java/org/apache/logging/log4j/jul/CallerInformationTest.java
+++ b/log4j-jul/src/test/java/org/apache/logging/log4j/jul/CallerInformationTest.java
@@ -20,7 +20,7 @@ import java.util.List;
 import java.util.logging.Logger;
 
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Rule;
diff --git a/log4j-jul/src/test/java/org/apache/logging/log4j/jul/CoreLoggerTest.java b/log4j-jul/src/test/java/org/apache/logging/log4j/jul/CoreLoggerTest.java
index ae91022..39aefee 100644
--- a/log4j-jul/src/test/java/org/apache/logging/log4j/jul/CoreLoggerTest.java
+++ b/log4j-jul/src/test/java/org/apache/logging/log4j/jul/CoreLoggerTest.java
@@ -25,7 +25,7 @@ import static org.junit.Assert.assertThat;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.After;
 import org.junit.AfterClass;
diff --git a/log4j-layout-jackson-json/src/test/java/org/apache/logging/log4j/jackson/json/layout/JsonLayoutMillisTest.java b/log4j-layout-jackson-json/src/test/java/org/apache/logging/log4j/jackson/json/layout/JsonLayoutMillisTest.java
index 0956ee7..14e551d 100644
--- a/log4j-layout-jackson-json/src/test/java/org/apache/logging/log4j/jackson/json/layout/JsonLayoutMillisTest.java
+++ b/log4j-layout-jackson-json/src/test/java/org/apache/logging/log4j/jackson/json/layout/JsonLayoutMillisTest.java
@@ -20,7 +20,7 @@ import org.apache.logging.log4j.core.categories.Layouts;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.Logger;
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/log4j-layout-jackson-json/src/test/java/org/apache/logging/log4j/jackson/json/layout/JsonLayoutTest.java b/log4j-layout-jackson-json/src/test/java/org/apache/logging/log4j/jackson/json/layout/JsonLayoutTest.java
index b3d6324..f516771 100644
--- a/log4j-layout-jackson-json/src/test/java/org/apache/logging/log4j/jackson/json/layout/JsonLayoutTest.java
+++ b/log4j-layout-jackson-json/src/test/java/org/apache/logging/log4j/jackson/json/layout/JsonLayoutTest.java
@@ -53,7 +53,7 @@ import org.apache.logging.log4j.message.ParameterizedMessage;
 import org.apache.logging.log4j.message.ReusableMessageFactory;
 import org.apache.logging.log4j.message.SimpleMessage;
 import org.apache.logging.log4j.spi.AbstractLogger;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.apache.logging.log4j.util.SortedArrayStringMap;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.AfterClass;
diff --git a/log4j-layout-jackson-xml/src/test/java/org/apache/logging/log4j/jackson/xml/layout/XmlLayoutTest.java b/log4j-layout-jackson-xml/src/test/java/org/apache/logging/log4j/jackson/xml/layout/XmlLayoutTest.java
index 0689d71..3438ab2 100644
--- a/log4j-layout-jackson-xml/src/test/java/org/apache/logging/log4j/jackson/xml/layout/XmlLayoutTest.java
+++ b/log4j-layout-jackson-xml/src/test/java/org/apache/logging/log4j/jackson/xml/layout/XmlLayoutTest.java
@@ -48,7 +48,7 @@ import org.apache.logging.log4j.jackson.xml.Log4jXmlObjectMapper;
 import org.apache.logging.log4j.test.junit.ThreadContextRule;
 import org.apache.logging.log4j.message.SimpleMessage;
 import org.apache.logging.log4j.spi.AbstractLogger;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.AfterClass;
 import org.junit.Assert;
 import org.junit.BeforeClass;
diff --git a/log4j-layout-jackson-yaml/src/test/java/org/apache/logging/log4j/jackson/yaml/layout/YamlLayoutTest.java b/log4j-layout-jackson-yaml/src/test/java/org/apache/logging/log4j/jackson/yaml/layout/YamlLayoutTest.java
index 6ae28b1..a8b5771 100644
--- a/log4j-layout-jackson-yaml/src/test/java/org/apache/logging/log4j/jackson/yaml/layout/YamlLayoutTest.java
+++ b/log4j-layout-jackson-yaml/src/test/java/org/apache/logging/log4j/jackson/yaml/layout/YamlLayoutTest.java
@@ -38,7 +38,7 @@ import org.apache.logging.log4j.jackson.AbstractJacksonLayout;
 import org.apache.logging.log4j.jackson.yaml.Log4jYamlObjectMapper;
 import org.apache.logging.log4j.message.SimpleMessage;
 import org.apache.logging.log4j.spi.AbstractLogger;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.AfterClass;
 import org.junit.Assert;
diff --git a/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutAdditionalFieldJsonTest.java b/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutAdditionalFieldJsonTest.java
index 1694c56..92dc86f 100644
--- a/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutAdditionalFieldJsonTest.java
+++ b/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutAdditionalFieldJsonTest.java
@@ -19,7 +19,7 @@ package org.apache.logging.log4j.layout.template.json;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.junit.LoggerContextSource;
 import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Test;
 
 @LoggerContextSource("additionalFieldEnrichedJsonTemplateLayoutLogging.json")
diff --git a/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutAdditionalFieldPropertiesTest.java b/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutAdditionalFieldPropertiesTest.java
index 2c55fe7..aabb650 100644
--- a/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutAdditionalFieldPropertiesTest.java
+++ b/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutAdditionalFieldPropertiesTest.java
@@ -19,7 +19,7 @@ package org.apache.logging.log4j.layout.template.json;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.junit.LoggerContextSource;
 import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Test;
 
 @LoggerContextSource("additionalFieldEnrichedJsonTemplateLayoutLogging.properties")
diff --git a/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutAdditionalFieldTestHelpers.java b/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutAdditionalFieldTestHelpers.java
index 383206c..d0ca081 100644
--- a/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutAdditionalFieldTestHelpers.java
+++ b/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutAdditionalFieldTestHelpers.java
@@ -19,7 +19,7 @@ package org.apache.logging.log4j.layout.template.json;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.layout.template.json.util.JsonReader;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.assertj.core.api.Assertions;
 
 import java.util.Arrays;
diff --git a/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutAdditionalFieldXmlTest.java b/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutAdditionalFieldXmlTest.java
index bb08322..d4adfc6 100644
--- a/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutAdditionalFieldXmlTest.java
+++ b/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutAdditionalFieldXmlTest.java
@@ -19,7 +19,7 @@ package org.apache.logging.log4j.layout.template.json;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.junit.LoggerContextSource;
 import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Test;
 
 @LoggerContextSource("additionalFieldEnrichedJsonTemplateLayoutLogging.xml")
diff --git a/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutAdditionalFieldYamlTest.java b/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutAdditionalFieldYamlTest.java
index 25a0954..9b05254 100644
--- a/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutAdditionalFieldYamlTest.java
+++ b/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutAdditionalFieldYamlTest.java
@@ -19,7 +19,7 @@ package org.apache.logging.log4j.layout.template.json;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.junit.LoggerContextSource;
 import org.apache.logging.log4j.core.junit.Named;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.jupiter.api.Test;
 
 @LoggerContextSource("additionalFieldEnrichedJsonTemplateLayoutLogging.yaml")
diff --git a/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutTest.java b/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutTest.java
index 4f2ee1d..958fb9d 100644
--- a/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutTest.java
+++ b/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutTest.java
@@ -52,7 +52,7 @@ import org.apache.logging.log4j.message.ParameterizedMessageFactory;
 import org.apache.logging.log4j.message.ReusableMessageFactory;
 import org.apache.logging.log4j.message.SimpleMessage;
 import org.apache.logging.log4j.message.StringMapMessage;
-import org.apache.logging.log4j.test.AvailablePortFinder;
+import org.apache.logging.log4j.core.test.AvailablePortFinder;
 import org.apache.logging.log4j.util.SortedArrayStringMap;
 import org.apache.logging.log4j.util.StringMap;
 import org.apache.logging.log4j.util.Strings;
diff --git a/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/util/RecyclerFactoriesTest.java b/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/util/RecyclerFactoriesTest.java
index d2347e5..daf2010 100644
--- a/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/util/RecyclerFactoriesTest.java
+++ b/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/util/RecyclerFactoriesTest.java
@@ -21,7 +21,7 @@ import org.apache.logging.log4j.plugins.convert.TypeConverterRegistry;
 import org.apache.logging.log4j.core.junit.LoggerContextSource;
 import org.apache.logging.log4j.core.junit.Named;
 import org.apache.logging.log4j.layout.template.json.JsonTemplateLayout;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.assertj.core.api.Assertions;
 import org.jctools.queues.MpmcArrayQueue;
 import org.junit.jupiter.api.Test;
diff --git a/log4j-liquibase/src/test/java/liquibase/ext/logging/log4j2/LoggingTest.java b/log4j-liquibase/src/test/java/liquibase/ext/logging/log4j2/LoggingTest.java
index 36d011c..4a339ec 100644
--- a/log4j-liquibase/src/test/java/liquibase/ext/logging/log4j2/LoggingTest.java
+++ b/log4j-liquibase/src/test/java/liquibase/ext/logging/log4j2/LoggingTest.java
@@ -24,7 +24,7 @@ import java.util.List;
 
 import liquibase.logging.Logger;
 
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.After;
 import org.junit.BeforeClass;
diff --git a/log4j-mongodb3/src/test/java/org/apache/logging/log4j/mongodb3/MongoDb3AuthFailureTest.java b/log4j-mongodb3/src/test/java/org/apache/logging/log4j/mongodb3/MongoDb3AuthFailureTest.java
index 10e2dae..72e497e 100644
--- a/log4j-mongodb3/src/test/java/org/apache/logging/log4j/mongodb3/MongoDb3AuthFailureTest.java
+++ b/log4j-mongodb3/src/test/java/org/apache/logging/log4j/mongodb3/MongoDb3AuthFailureTest.java
@@ -21,8 +21,8 @@ import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.categories.Appenders;
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
 import org.apache.logging.log4j.mongodb3.MongoDb3TestRule.LoggingTarget;
-import org.apache.logging.log4j.test.AvailablePortSystemPropertyTestRule;
-import org.apache.logging.log4j.test.RuleChainFactory;
+import org.apache.logging.log4j.core.test.AvailablePortSystemPropertyTestRule;
+import org.apache.logging.log4j.core.test.RuleChainFactory;
 import org.bson.Document;
 import org.junit.Assert;
 import org.junit.ClassRule;
diff --git a/log4j-mongodb3/src/test/java/org/apache/logging/log4j/mongodb3/MongoDb3CappedTest.java b/log4j-mongodb3/src/test/java/org/apache/logging/log4j/mongodb3/MongoDb3CappedTest.java
index f6aeafc..41ae871 100644
--- a/log4j-mongodb3/src/test/java/org/apache/logging/log4j/mongodb3/MongoDb3CappedTest.java
+++ b/log4j-mongodb3/src/test/java/org/apache/logging/log4j/mongodb3/MongoDb3CappedTest.java
@@ -21,8 +21,8 @@ import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.categories.Appenders;
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
 import org.apache.logging.log4j.mongodb3.MongoDb3TestRule.LoggingTarget;
-import org.apache.logging.log4j.test.AvailablePortSystemPropertyTestRule;
-import org.apache.logging.log4j.test.RuleChainFactory;
+import org.apache.logging.log4j.core.test.AvailablePortSystemPropertyTestRule;
+import org.apache.logging.log4j.core.test.RuleChainFactory;
 import org.bson.Document;
 import org.junit.Assert;
 import org.junit.ClassRule;
diff --git a/log4j-mongodb3/src/test/java/org/apache/logging/log4j/mongodb3/MongoDb3MapMessageTest.java b/log4j-mongodb3/src/test/java/org/apache/logging/log4j/mongodb3/MongoDb3MapMessageTest.java
index a971d89..e5ec753 100644
--- a/log4j-mongodb3/src/test/java/org/apache/logging/log4j/mongodb3/MongoDb3MapMessageTest.java
+++ b/log4j-mongodb3/src/test/java/org/apache/logging/log4j/mongodb3/MongoDb3MapMessageTest.java
@@ -22,8 +22,8 @@ import org.apache.logging.log4j.core.categories.Appenders;
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
 import org.apache.logging.log4j.message.MapMessage;
 import org.apache.logging.log4j.mongodb3.MongoDb3TestRule.LoggingTarget;
-import org.apache.logging.log4j.test.AvailablePortSystemPropertyTestRule;
-import org.apache.logging.log4j.test.RuleChainFactory;
+import org.apache.logging.log4j.core.test.AvailablePortSystemPropertyTestRule;
+import org.apache.logging.log4j.core.test.RuleChainFactory;
 import org.bson.Document;
 import org.junit.Assert;
 import org.junit.ClassRule;
diff --git a/log4j-mongodb3/src/test/java/org/apache/logging/log4j/mongodb3/MongoDb3Test.java b/log4j-mongodb3/src/test/java/org/apache/logging/log4j/mongodb3/MongoDb3Test.java
index d173c48..e7342a6 100644
--- a/log4j-mongodb3/src/test/java/org/apache/logging/log4j/mongodb3/MongoDb3Test.java
+++ b/log4j-mongodb3/src/test/java/org/apache/logging/log4j/mongodb3/MongoDb3Test.java
@@ -21,8 +21,8 @@ import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.categories.Appenders;
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
 import org.apache.logging.log4j.mongodb3.MongoDb3TestRule.LoggingTarget;
-import org.apache.logging.log4j.test.AvailablePortSystemPropertyTestRule;
-import org.apache.logging.log4j.test.RuleChainFactory;
+import org.apache.logging.log4j.core.test.AvailablePortSystemPropertyTestRule;
+import org.apache.logging.log4j.core.test.RuleChainFactory;
 import org.bson.Document;
 import org.junit.Assert;
 import org.junit.ClassRule;
diff --git a/log4j-mongodb3/src/test/java/org/apache/logging/log4j/mongodb3/MongoDb3TestTestRuleTest.java b/log4j-mongodb3/src/test/java/org/apache/logging/log4j/mongodb3/MongoDb3TestTestRuleTest.java
index ccdf0c8..10b5926 100644
--- a/log4j-mongodb3/src/test/java/org/apache/logging/log4j/mongodb3/MongoDb3TestTestRuleTest.java
+++ b/log4j-mongodb3/src/test/java/org/apache/logging/log4j/mongodb3/MongoDb3TestTestRuleTest.java
@@ -20,8 +20,8 @@ package org.apache.logging.log4j.mongodb3;
 import org.apache.commons.lang3.JavaVersion;
 import org.apache.commons.lang3.SystemUtils;
 import org.apache.logging.log4j.mongodb3.MongoDb3TestRule.LoggingTarget;
-import org.apache.logging.log4j.test.AvailablePortSystemPropertyTestRule;
-import org.apache.logging.log4j.test.RuleChainFactory;
+import org.apache.logging.log4j.core.test.AvailablePortSystemPropertyTestRule;
+import org.apache.logging.log4j.core.test.RuleChainFactory;
 import org.junit.Assert;
 import org.junit.Assume;
 import org.junit.BeforeClass;
diff --git a/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4AuthFailureTest.java b/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4AuthFailureTest.java
index 26a9b04..8a07847 100644
--- a/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4AuthFailureTest.java
+++ b/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4AuthFailureTest.java
@@ -21,8 +21,8 @@ import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.categories.Appenders;
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
 import org.apache.logging.log4j.mongodb4.MongoDb4TestRule.LoggingTarget;
-import org.apache.logging.log4j.test.AvailablePortSystemPropertyTestRule;
-import org.apache.logging.log4j.test.RuleChainFactory;
+import org.apache.logging.log4j.core.test.AvailablePortSystemPropertyTestRule;
+import org.apache.logging.log4j.core.test.RuleChainFactory;
 import org.bson.Document;
 import org.junit.Assert;
 import org.junit.ClassRule;
diff --git a/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4CappedTest.java b/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4CappedTest.java
index b9bb477..a2fcb8b 100644
--- a/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4CappedTest.java
+++ b/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4CappedTest.java
@@ -21,8 +21,8 @@ import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.categories.Appenders;
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
 import org.apache.logging.log4j.mongodb4.MongoDb4TestRule.LoggingTarget;
-import org.apache.logging.log4j.test.AvailablePortSystemPropertyTestRule;
-import org.apache.logging.log4j.test.RuleChainFactory;
+import org.apache.logging.log4j.core.test.AvailablePortSystemPropertyTestRule;
+import org.apache.logging.log4j.core.test.RuleChainFactory;
 import org.bson.Document;
 import org.junit.Assert;
 import org.junit.ClassRule;
diff --git a/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4MapMessageTest.java b/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4MapMessageTest.java
index 602d40f..59f1aa2 100644
--- a/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4MapMessageTest.java
+++ b/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4MapMessageTest.java
@@ -22,8 +22,8 @@ import org.apache.logging.log4j.core.categories.Appenders;
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
 import org.apache.logging.log4j.message.MapMessage;
 import org.apache.logging.log4j.mongodb4.MongoDb4TestRule.LoggingTarget;
-import org.apache.logging.log4j.test.AvailablePortSystemPropertyTestRule;
-import org.apache.logging.log4j.test.RuleChainFactory;
+import org.apache.logging.log4j.core.test.AvailablePortSystemPropertyTestRule;
+import org.apache.logging.log4j.core.test.RuleChainFactory;
 import org.bson.Document;
 import org.junit.Assert;
 import org.junit.ClassRule;
diff --git a/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4Test.java b/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4Test.java
index fdf42d7..dd61a6a 100644
--- a/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4Test.java
+++ b/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4Test.java
@@ -21,8 +21,8 @@ import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.categories.Appenders;
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
 import org.apache.logging.log4j.mongodb4.MongoDb4TestRule.LoggingTarget;
-import org.apache.logging.log4j.test.AvailablePortSystemPropertyTestRule;
-import org.apache.logging.log4j.test.RuleChainFactory;
+import org.apache.logging.log4j.core.test.AvailablePortSystemPropertyTestRule;
+import org.apache.logging.log4j.core.test.RuleChainFactory;
 import org.bson.Document;
 import org.junit.Assert;
 import org.junit.ClassRule;
diff --git a/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4TestTestRuleTest.java b/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4TestTestRuleTest.java
index 086af07..81ed69a 100644
--- a/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4TestTestRuleTest.java
+++ b/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4TestTestRuleTest.java
@@ -20,8 +20,8 @@ package org.apache.logging.log4j.mongodb4;
 import org.apache.commons.lang3.JavaVersion;
 import org.apache.commons.lang3.SystemUtils;
 import org.apache.logging.log4j.mongodb4.MongoDb4TestRule.LoggingTarget;
-import org.apache.logging.log4j.test.AvailablePortSystemPropertyTestRule;
-import org.apache.logging.log4j.test.RuleChainFactory;
+import org.apache.logging.log4j.core.test.AvailablePortSystemPropertyTestRule;
+import org.apache.logging.log4j.core.test.RuleChainFactory;
 import org.junit.Assert;
 import org.junit.Assume;
 import org.junit.BeforeClass;
diff --git a/log4j-osgi/pom.xml b/log4j-osgi/pom.xml
index b4a87b3..432810c 100644
--- a/log4j-osgi/pom.xml
+++ b/log4j-osgi/pom.xml
@@ -43,7 +43,12 @@
     </dependency>
     <dependency>
       <groupId>org.osgi</groupId>
-      <artifactId>org.osgi.core</artifactId>
+      <artifactId>org.osgi.framework</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.resource</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/log4j-plugins/pom.xml b/log4j-plugins/pom.xml
index e1c5883..3b9aac7 100644
--- a/log4j-plugins/pom.xml
+++ b/log4j-plugins/pom.xml
@@ -41,7 +41,12 @@
     <!-- Used for OSGi bundle support -->
     <dependency>
       <groupId>org.osgi</groupId>
-      <artifactId>org.osgi.core</artifactId>
+      <artifactId>org.osgi.framework</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.resource</artifactId>
       <scope>provided</scope>
     </dependency>
 
@@ -83,6 +88,33 @@
               <goal>clean</goal>
             </goals>
           </execution>
+          <execution>
+            <id>delete-test-module-info</id>
+            <phase>generate-test-sources</phase>
+            <goals>
+              <goal>clean</goal>
+            </goals>
+            <configuration>
+              <excludeDefaultDirectories>true</excludeDefaultDirectories>
+              <verbose>true</verbose>
+              <filesets>
+                <fileset>
+                  <directory>${project.build.testOutputDirectory}</directory>
+                  <followSymlinks>false</followSymlinks>
+                  <useDefaultExcludes>true</useDefaultExcludes>
+                  <includes>
+                    <include>module-info.class</include>
+                    <include>**/Log4jPlugins.class</include>
+                  </includes>
+                </fileset>
+                <fileset>
+                  <directory>${project.build.directory}/generated-test-sources/test-annotations</directory>
+                  <followSymlinks>false</followSymlinks>
+                  <useDefaultExcludes>true</useDefaultExcludes>
+                </fileset>
+              </filesets>
+            </configuration>
+          </execution>
         </executions>
       </plugin>
       <plugin>
@@ -101,7 +133,7 @@
           </execution>
           <execution>
             <!-- then do a processing-only pass to generate plugins -->
-            <id>process-plugins</id>
+            <id>preprocess-plugins</id>
             <goals>
               <goal>compile</goal>
             </goals>
@@ -116,8 +148,8 @@
             </configuration>
           </execution>
           <execution>
-            <!-- then compile the test plugins -->
-            <id>process-test-plugins</id>
+            <!-- capture the test plugins -->
+            <id>preprocess-test-plugins</id>
             <goals>
               <goal>testCompile</goal>
             </goals>
@@ -125,12 +157,36 @@
             <configuration combine.self="override">
               <source>${maven.compiler.source}</source>
               <target>${maven.compiler.target}</target>
+              <proc>only</proc>
+              <annotationProcessors>
+                <annotationProcessor>org.apache.logging.log4j.plugins.processor.PluginProcessor</annotationProcessor>
+              </annotationProcessors>
+              <compileSourceRoots>
+                <compileSourceRoot>${project.basedir}/src/test/java-test</compileSourceRoot>
+              </compileSourceRoots>
+              <parameters>true</parameters>
+            </configuration>
+          </execution>
+          <execution>
+            <!-- capture the test plugins -->
+            <id>preprocess-unit-test-plugins</id>
+            <goals>
+              <goal>testCompile</goal>
+            </goals>
+            <phase>generate-sources</phase>
+            <configuration combine.self="override">
+              <source>${maven.compiler.source}</source>
+              <target>${maven.compiler.target}</target>
+              <proc>only</proc>
               <annotationProcessors>
                 <annotationProcessor>org.apache.logging.log4j.plugins.processor.PluginProcessor</annotationProcessor>
               </annotationProcessors>
               <compileSourceRoots>
+                <compileSourceRoot>${project.basedir}/src/test/java</compileSourceRoot>
                 <compileSourceRoot>${project.basedir}/src/test/java-test</compileSourceRoot>
               </compileSourceRoots>
+              <generatedTestSourcesDirectory>${project.build.directory}/generated-test-sources/unit-test-annotations</generatedTestSourcesDirectory>
+              <outputDirectory>${project.build.directory}/unit-test-classes</outputDirectory>
               <parameters>true</parameters>
             </configuration>
           </execution>
@@ -167,11 +223,33 @@
               </annotationProcessorPaths>
               <forceJavacCompilerUse>true</forceJavacCompilerUse>
               <parameters>true</parameters>
+              <compileSourceRoots>
+                <compileSourceRoot>${project.basedir}/src/main/java</compileSourceRoot>
+                <compileSourceRoot>${project.basedir}/src/main/java9</compileSourceRoot>
+              </compileSourceRoots>
+            </configuration>
+          </execution>
+          <execution>
+            <!-- then compile the test module-->
+            <id>process-test-plugins</id>
+            <goals>
+              <goal>testCompile</goal>
+            </goals>
+            <phase>process-classes</phase>
+            <configuration combine.self="override">
+              <source>${maven.compiler.source}</source>
+              <target>${maven.compiler.target}</target>
+              <proc>none</proc>
+              <compileSourceRoots>
+                <compileSourceRoot>${project.basedir}/src/test/java-test</compileSourceRoot>
+                <compileSourceRoot>${project.basedir}/src/test/java-test9</compileSourceRoot>
+              </compileSourceRoots>
+              <parameters>true</parameters>
             </configuration>
           </execution>
           <execution>
             <!-- compile the test source -->
-            <id>default-test-compile</id>
+            <id>default-testCompile</id>
             <goals>
               <goal>testCompile</goal>
             </goals>
@@ -193,6 +271,8 @@
                 <Xmaxwarns>10000</Xmaxwarns>
                 <Xlint />
               </compilerArguments>
+              <forceJavacCompilerUse>true</forceJavacCompilerUse>
+              <parameters>true</parameters>
               <annotationProcessorPaths>
                 <path>
                   <groupId>com.google.errorprone</groupId>
@@ -200,39 +280,36 @@
                   <version>${errorprone.version}</version>
                 </path>
               </annotationProcessorPaths>
-              <forceJavacCompilerUse>true</forceJavacCompilerUse>
-              <parameters>true</parameters>
+              <compileSourceRoots>
+                <compileSourceRoot>${project.basedir}/src/test/java</compileSourceRoot>
+                <compileSourceRoot>${project.basedir}/src/test/java9</compileSourceRoot>
+                <compileSourceRoot>${project.basedir}/src/test/java-test</compileSourceRoot>
+                <compileSourceRoot>${project.build.directory}/generated-test-sources/unit-test-annotations</compileSourceRoot>
+              </compileSourceRoots>
             </configuration>
           </execution>
         </executions>
       </plugin>
       <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>build-helper-maven-plugin</artifactId>
-        <version>3.2.0</version>
+        <artifactId>maven-resources-plugin</artifactId>
         <executions>
           <execution>
-            <id>add-module</id>
-            <phase>process-sources</phase>
-            <goals>
-              <goal>add-source</goal>
-            </goals>
-            <configuration>
-              <sources>
-                <source>src/main/java9</source>
-              </sources>
-            </configuration>
-          </execution>
-          <execution>
-            <id>add-test-module</id>
-            <phase>process-test-sources</phase>
+            <id>copy-service</id>
+            <phase>process-classes</phase>
             <goals>
-              <goal>add-test-source</goal>
+              <goal>copy-resources</goal>
             </goals>
             <configuration>
-              <sources>
-                <source>src/test/java9</source>
-              </sources>
+              <outputDirectory>${project.build.testOutputDirectory}</outputDirectory>
+              <overwrite>true</overwrite>
+              <resources>
+                <resource>
+                  <directory>${project.build.directory}/unit-test-classes</directory>
+                  <includes>
+                    <include>**/*</include>
+                  </includes>
+                </resource>
+              </resources>
             </configuration>
           </execution>
         </executions>
@@ -287,7 +364,7 @@
             <goals>
               <goal>test-jar</goal>
             </goals>
-            <phase>process-resources</phase>
+            <phase>process-classes</phase>
             <configuration>
               <archive>
                 <!--<manifestFile>${manifestfile}</manifestFile>-->
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/processor/PluginProcessor.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/processor/PluginProcessor.java
index d655416..ec18989 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/processor/PluginProcessor.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/processor/PluginProcessor.java
@@ -69,6 +69,9 @@ public class PluginProcessor extends AbstractProcessor {
     private static final String SERVICE_FILE_NAME =
             "META-INF/services/org.apache.logging.log4j.plugins.processor.PluginService";
 
+    public PluginProcessor() {
+    }
+
     @Override
     public SourceVersion getSupportedSourceVersion() {
         return SourceVersion.latest();
@@ -86,6 +89,7 @@ public class PluginProcessor extends AbstractProcessor {
                 messager.printMessage(Kind.NOTE, "No elements to process");
                 return false;
             }
+            messager.printMessage(Kind.NOTE, "Retrieved " + elements.size() + " Plugin elements");
             List<PluginEntry> list = new ArrayList<>();
             packageName = collectPlugins(packageName, elements, list);
             writeClassFile(packageName, list);
diff --git a/log4j-plugins/src/main/java9/module-info.java b/log4j-plugins/src/main/java9/module-info.java
index 2de0ae8..147c65b 100644
--- a/log4j-plugins/src/main/java9/module-info.java
+++ b/log4j-plugins/src/main/java9/module-info.java
@@ -28,7 +28,7 @@ module org.apache.logging.log4j.plugins {
 
     requires java.compiler;
     requires org.apache.logging.log4j;
-    requires transitive org.osgi.core;
+    requires transitive org.osgi.framework;
 
     provides org.apache.logging.log4j.plugins.processor.PluginService with org.apache.logging.log4j.plugins.convert.plugins.Log4jPlugins;
     provides javax.annotation.processing.Processor with org.apache.logging.log4j.plugins.processor.PluginProcessor;
diff --git a/log4j-plugins/src/test/java-test9/module-info.java b/log4j-plugins/src/test/java-test9/module-info.java
new file mode 100644
index 0000000..ebd78ea
--- /dev/null
+++ b/log4j-plugins/src/test/java-test9/module-info.java
@@ -0,0 +1,8 @@
+module org.apache.logging.log4j.plugins.test {
+    exports org.apache.logging.log4j.plugins.test.validation;
+
+    requires org.apache.logging.log4j;
+    requires org.apache.logging.log4j.plugins;
+
+    provides org.apache.logging.log4j.plugins.processor.PluginService with org.apache.logging.log4j.plugins.test.validation.plugins.Log4jPlugins;
+}
\ No newline at end of file
diff --git a/log4j-plugins/src/test/java-test/org/apache/logging/log4j/plugins/test/processor/FakePlugin.java b/log4j-plugins/src/test/java/org/apache/logging/log4j/plugins/processor/FakePlugin.java
similarity index 95%
rename from log4j-plugins/src/test/java-test/org/apache/logging/log4j/plugins/test/processor/FakePlugin.java
rename to log4j-plugins/src/test/java/org/apache/logging/log4j/plugins/processor/FakePlugin.java
index 979fdf4..48ea7dc 100644
--- a/log4j-plugins/src/test/java-test/org/apache/logging/log4j/plugins/test/processor/FakePlugin.java
+++ b/log4j-plugins/src/test/java/org/apache/logging/log4j/plugins/processor/FakePlugin.java
@@ -15,7 +15,7 @@
  * limitations under the license.
  */
 
-package org.apache.logging.log4j.plugins.test.processor;
+package org.apache.logging.log4j.plugins.processor;
 
 import org.apache.logging.log4j.plugins.Plugin;
 import org.apache.logging.log4j.plugins.PluginAliases;
diff --git a/log4j-plugins/src/test/java/org/apache/logging/log4j/plugins/processor/PluginProcessorTest.java b/log4j-plugins/src/test/java/org/apache/logging/log4j/plugins/processor/PluginProcessorTest.java
index b43c95a..38c9a2c 100644
--- a/log4j-plugins/src/test/java/org/apache/logging/log4j/plugins/processor/PluginProcessorTest.java
+++ b/log4j-plugins/src/test/java/org/apache/logging/log4j/plugins/processor/PluginProcessorTest.java
@@ -19,7 +19,6 @@ package org.apache.logging.log4j.plugins.processor;
 
 import org.apache.logging.log4j.plugins.Plugin;
 import org.apache.logging.log4j.plugins.PluginAliases;
-import org.apache.logging.log4j.plugins.test.processor.FakePlugin;
 import org.apache.logging.log4j.plugins.util.PluginType;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -39,7 +38,7 @@ public class PluginProcessorTest {
 
     @BeforeClass
     public static void setUpClass() throws Exception {
-        Class<?> clazz = PluginProcessor.class.getClassLoader().loadClass("org.apache.logging.log4j.plugins.test.plugins.Log4jPlugins");
+        Class<?> clazz = PluginProcessor.class.getClassLoader().loadClass("org.apache.logging.log4j.plugins.plugins.Log4jPlugins");
         assertNotNull("Could not locate plugins class", clazz);
         pluginService = (PluginService) clazz.getDeclaredConstructor().newInstance();;
     }
diff --git a/log4j-plugins/src/test/java9/module-info.java b/log4j-plugins/src/test/java9/module-info.java
index d96dd94..68ded17 100644
--- a/log4j-plugins/src/test/java9/module-info.java
+++ b/log4j-plugins/src/test/java9/module-info.java
@@ -1,8 +1,10 @@
 open module org.apache.logging.log4j.plugins {
     exports org.apache.logging.log4j.plugins;
+    exports org.apache.logging.log4j.plugins.test.validation;
 
     requires java.compiler;
     requires org.apache.logging.log4j;
+    requires org.apache.logging.log4j.test;
     requires org.junit.jupiter.api;
     requires org.junit.jupiter.engine;
     requires org.junit.platform.commons;
diff --git a/log4j-slf4j-impl/src/test/java/org/apache/logging/slf4j/CallerInformationTest.java b/log4j-slf4j-impl/src/test/java/org/apache/logging/slf4j/CallerInformationTest.java
index 0f7e092..a4a5c87 100644
--- a/log4j-slf4j-impl/src/test/java/org/apache/logging/slf4j/CallerInformationTest.java
+++ b/log4j-slf4j-impl/src/test/java/org/apache/logging/slf4j/CallerInformationTest.java
@@ -21,7 +21,7 @@ import static org.junit.Assert.assertEquals;
 import java.util.List;
 
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.ClassRule;
 import org.junit.Test;
 import org.slf4j.Logger;
diff --git a/log4j-slf4j-impl/src/test/java/org/apache/logging/slf4j/LoggerTest.java b/log4j-slf4j-impl/src/test/java/org/apache/logging/slf4j/LoggerTest.java
index 6d04e7a..2955570 100644
--- a/log4j-slf4j-impl/src/test/java/org/apache/logging/slf4j/LoggerTest.java
+++ b/log4j-slf4j-impl/src/test/java/org/apache/logging/slf4j/LoggerTest.java
@@ -24,7 +24,7 @@ import java.util.List;
 import java.util.Locale;
 
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.After;
 import org.junit.Before;
diff --git a/log4j-slf4j-impl/src/test/java/org/apache/logging/slf4j/OptionalTest.java b/log4j-slf4j-impl/src/test/java/org/apache/logging/slf4j/OptionalTest.java
index a3faeff..16f5e32 100644
--- a/log4j-slf4j-impl/src/test/java/org/apache/logging/slf4j/OptionalTest.java
+++ b/log4j-slf4j-impl/src/test/java/org/apache/logging/slf4j/OptionalTest.java
@@ -19,7 +19,7 @@ package org.apache.logging.slf4j;
 import java.util.List;
 
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.Before;
 import org.junit.ClassRule;
diff --git a/log4j-slf4j18-impl/src/test/java/org/apache/logging/slf4j/CallerInformationTest.java b/log4j-slf4j18-impl/src/test/java/org/apache/logging/slf4j/CallerInformationTest.java
index 762b6ab..f42a63c 100644
--- a/log4j-slf4j18-impl/src/test/java/org/apache/logging/slf4j/CallerInformationTest.java
+++ b/log4j-slf4j18-impl/src/test/java/org/apache/logging/slf4j/CallerInformationTest.java
@@ -21,7 +21,7 @@ import static org.junit.Assert.assertEquals;
 import java.util.List;
 
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.ClassRule;
 import org.junit.Test;
 import org.slf4j.Logger;
diff --git a/log4j-slf4j18-impl/src/test/java/org/apache/logging/slf4j/LoggerTest.java b/log4j-slf4j18-impl/src/test/java/org/apache/logging/slf4j/LoggerTest.java
index 7d1ac7b..03d678b 100644
--- a/log4j-slf4j18-impl/src/test/java/org/apache/logging/slf4j/LoggerTest.java
+++ b/log4j-slf4j18-impl/src/test/java/org/apache/logging/slf4j/LoggerTest.java
@@ -23,7 +23,7 @@ import static org.junit.Assert.assertTrue;
 import java.util.List;
 
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.After;
 import org.junit.Before;
diff --git a/log4j-smtp/src/test/java/org/apache/logging/log4j/smtp/appender/SmtpAppenderAsyncTest.java b/log4j-smtp/src/test/java/org/apache/logging/log4j/smtp/appender/SmtpAppenderAsyncTest.java
index 11e1361..c98d7ff 100644
--- a/log4j-smtp/src/test/java/org/apache/logging/log4j/smtp/appender/SmtpAppenderAsyncTest.java
+++ b/log4j-smtp/src/test/java/org/apache/logging/log4j/smtp/appender/SmtpAppenderAsyncTest.java
@@ -21,7 +21,7 @@ import org.apache.logging.dumbster.smtp.SmtpMessage;
 import org.apache.logging.log4j.ThreadContext;
 import org.apache.logging.log4j.core.Logger;
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.AvailablePortFinder;
+import org.apache.logging.log4j.core.test.AvailablePortFinder;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
diff --git a/log4j-smtp/src/test/java/org/apache/logging/log4j/smtp/appender/SmtpAppenderTest.java b/log4j-smtp/src/test/java/org/apache/logging/log4j/smtp/appender/SmtpAppenderTest.java
index 44d7708..c75dccb 100644
--- a/log4j-smtp/src/test/java/org/apache/logging/log4j/smtp/appender/SmtpAppenderTest.java
+++ b/log4j-smtp/src/test/java/org/apache/logging/log4j/smtp/appender/SmtpAppenderTest.java
@@ -30,7 +30,7 @@ import org.apache.logging.log4j.core.categories.Appenders;
 import org.apache.logging.log4j.core.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.smtp.MimeMessageBuilder;
-import org.apache.logging.log4j.test.AvailablePortFinder;
+import org.apache.logging.log4j.core.test.AvailablePortFinder;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
diff --git a/log4j-spring-boot/src/test/java/org/apache/logging/log4j/spring/boot/SpringProfileTest.java b/log4j-spring-boot/src/test/java/org/apache/logging/log4j/spring/boot/SpringProfileTest.java
index 3182ae3..e7a90df 100644
--- a/log4j-spring-boot/src/test/java/org/apache/logging/log4j/spring/boot/SpringProfileTest.java
+++ b/log4j-spring-boot/src/test/java/org/apache/logging/log4j/spring/boot/SpringProfileTest.java
@@ -22,7 +22,7 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.core.Appender;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.appender.ConsoleAppender;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.springframework.mock.env.MockEnvironment;
diff --git a/log4j-taglib/src/test/java/org/apache/logging/log4j/taglib/CatchingTagTest.java b/log4j-taglib/src/test/java/org/apache/logging/log4j/taglib/CatchingTagTest.java
index f6fbdf1..fa670fc 100644
--- a/log4j-taglib/src/test/java/org/apache/logging/log4j/taglib/CatchingTagTest.java
+++ b/log4j-taglib/src/test/java/org/apache/logging/log4j/taglib/CatchingTagTest.java
@@ -22,7 +22,7 @@ import javax.servlet.jsp.tagext.Tag;
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Test;
diff --git a/log4j-taglib/src/test/java/org/apache/logging/log4j/taglib/EnterTagTest.java b/log4j-taglib/src/test/java/org/apache/logging/log4j/taglib/EnterTagTest.java
index c9fc6ec..1e5deba 100644
--- a/log4j-taglib/src/test/java/org/apache/logging/log4j/taglib/EnterTagTest.java
+++ b/log4j-taglib/src/test/java/org/apache/logging/log4j/taglib/EnterTagTest.java
@@ -21,7 +21,7 @@ import javax.servlet.jsp.tagext.Tag;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Test;
diff --git a/log4j-taglib/src/test/java/org/apache/logging/log4j/taglib/ExitTagTest.java b/log4j-taglib/src/test/java/org/apache/logging/log4j/taglib/ExitTagTest.java
index 7bc9eb4..96712a9 100644
--- a/log4j-taglib/src/test/java/org/apache/logging/log4j/taglib/ExitTagTest.java
+++ b/log4j-taglib/src/test/java/org/apache/logging/log4j/taglib/ExitTagTest.java
@@ -21,7 +21,7 @@ import javax.servlet.jsp.tagext.Tag;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Test;
diff --git a/log4j-taglib/src/test/java/org/apache/logging/log4j/taglib/LoggingMessageTagSupportTest.java b/log4j-taglib/src/test/java/org/apache/logging/log4j/taglib/LoggingMessageTagSupportTest.java
index b1242b1..b2e47c5 100644
--- a/log4j-taglib/src/test/java/org/apache/logging/log4j/taglib/LoggingMessageTagSupportTest.java
+++ b/log4j-taglib/src/test/java/org/apache/logging/log4j/taglib/LoggingMessageTagSupportTest.java
@@ -26,7 +26,7 @@ import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.MarkerManager;
 import org.apache.logging.log4j.core.junit.LoggerContextRule;
-import org.apache.logging.log4j.test.appender.ListAppender;
+import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.junit.ClassRule;
 import org.junit.Test;
 import org.springframework.mock.web.MockBodyContent;
diff --git a/pom.xml b/pom.xml
index ca5dc58..6d7d4ce 100644
--- a/pom.xml
+++ b/pom.xml
@@ -185,16 +185,16 @@
     <!--<Log4jReleaseManager>Matt Sicker</Log4jReleaseManager> -->
     <!--<Log4jReleaseKey>748F15B2CF9BA8F024155E6ED7C92B70FA1C814D</Log4jReleaseKey> -->
     <!-- note that any properties you want available in velocity templates must not use periods! -->
-    <slf4jVersion>1.7.25</slf4jVersion>
+    <slf4jVersion>1.7.30</slf4jVersion>
     <logbackVersion>1.2.3</logbackVersion>
     <jackson1Version>1.9.13</jackson1Version>
-    <jackson2Version>2.11.2</jackson2Version>
+    <jackson2Version>2.12.3</jackson2Version>
     <spring-boot.version>2.3.6.RELEASE</spring-boot.version>
     <springVersion>5.3.2</springVersion>
     <kubernetes-client.version>4.6.1</kubernetes-client.version>
     <flumeVersion>1.9.0</flumeVersion>
-    <disruptorVersion>3.4.2</disruptorVersion>
-    <conversantDisruptorVersion>1.2.15</conversantDisruptorVersion>
+    <disruptorVersion>3.4.3</disruptorVersion>
+    <conversantDisruptorVersion>1.2.19</conversantDisruptorVersion>
     <elastic.version>7.6.2</elastic.version>
     <mongodb3.version>3.12.4</mongodb3.version>
     <mongodb4.version>4.0.3</mongodb4.version>
@@ -239,14 +239,15 @@
     <projectDir />
     <commonsLoggingVersion>1.2</commonsLoggingVersion>
     <javax.persistence>2.2.1</javax.persistence>
-    <osgi.api.version>6.0.0</osgi.api.version>
+    <osgi.api.version>1.10.0</osgi.api.version>
     <activemq.version>5.15.9</activemq.version>
     <!-- Allow Clirr severity to be overriden by the command-line option -DminSeverity=level -->
     <minSeverity>info</minSeverity>
-    <jctoolsVersion>3.1.0</jctoolsVersion>
+    <jctoolsVersion>3.3.0</jctoolsVersion>
     <junitVersion>4.13.1</junitVersion>
     <junitJupiterVersion>5.7.0</junitJupiterVersion>
-    <mockitoVersion>3.5.5</mockitoVersion>
+    <mockitoVersion>3.9.0</mockitoVersion>
+    <byteBuddyVersion>1.11.0</byteBuddyVersion>
     <argLine>-Xms256m -Xmx1024m</argLine>
     <javaTargetVersion>11</javaTargetVersion>
     <module.name />
@@ -449,14 +450,20 @@
       </dependency>
       <dependency>
         <groupId>org.osgi</groupId>
-        <artifactId>org.osgi.core</artifactId>
+        <artifactId>org.osgi.framework</artifactId>
         <version>${osgi.api.version}</version>
         <scope>provided</scope>
       </dependency>
       <dependency>
+        <groupId>org.osgi</groupId>
+        <artifactId>org.osgi.resource</artifactId>
+        <version>1.0.1</version>
+        <scope>provided</scope>
+      </dependency>
+      <dependency>
         <groupId>org.fusesource.jansi</groupId>
         <artifactId>jansi</artifactId>
-        <version>1.17.1</version>
+        <version>2.3.2</version>
         <optional>true</optional>
       </dependency>
       <dependency>
@@ -762,6 +769,18 @@
         <scope>test</scope>
       </dependency>
       <dependency>
+        <groupId>net.bytebuddy</groupId>
+        <artifactId>byte-buddy</artifactId>
+        <version>${byteBuddyVersion}</version>
+        <scope>test</scope>
+      </dependency>
+      <dependency>
+        <groupId>net.bytebuddy</groupId>
+        <artifactId>byte-buddy-agent</artifactId>
+        <version>${byteBuddyVersion}</version>
+        <scope>test</scope>
+      </dependency>
+      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-aop</artifactId>
         <version>${springVersion}</version>
@@ -780,6 +799,12 @@
         <groupId>org.springframework</groupId>
         <artifactId>spring-core</artifactId>
         <version>${springVersion}</version>
+        <exclusions>
+          <exclusion>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-jcl</artifactId>
+          </exclusion>
+        </exclusions>
       </dependency>
       <dependency>
         <groupId>org.springframework</groupId>
@@ -850,8 +875,14 @@
       <dependency>
         <groupId>net.javacrumbs.json-unit</groupId>
         <artifactId>json-unit</artifactId>
-        <version>1.31.1</version>
+        <version>2.25.0</version>
         <scope>test</scope>
+        <exclusions>
+          <exclusion>
+            <groupId>org.hamcrest</groupId>
+            <artifactId>hamcrest-core</artifactId>
+          </exclusion>
+        </exclusions>
       </dependency>
       <dependency>
         <groupId>org.xmlunit</groupId>
@@ -864,6 +895,12 @@
         <artifactId>xmlunit-matchers</artifactId>
         <version>2.6.2</version>
         <scope>test</scope>
+        <exclusions>
+          <exclusion>
+            <groupId>org.hamcrest</groupId>
+            <artifactId>hamcrest-core</artifactId>
+          </exclusion>
+        </exclusions>
       </dependency>
       <dependency>
         <groupId>commons-io</groupId>
@@ -888,6 +925,12 @@
         <artifactId>wiremock</artifactId>
         <scope>test</scope>
         <version>2.19.0</version>
+        <exclusions>
+          <exclusion>
+            <groupId>com.github.jknack</groupId>
+            <artifactId>handlebars-helpers</artifactId>
+          </exclusion>
+        </exclusions>
       </dependency>
       <!-- Used for compressing to formats other than zip and gz -->
       <dependency>
@@ -912,6 +955,12 @@
         <groupId>com.google.code.java-allocation-instrumenter</groupId>
         <artifactId>java-allocation-instrumenter</artifactId>
         <version>3.3.0</version>
+        <exclusions>
+          <exclusion>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava-testlib</artifactId>
+          </exclusion>
+        </exclusions>
       </dependency>
       <dependency>
         <groupId>org.hdrhistogram</groupId>
@@ -996,6 +1045,11 @@
           <artifactId>maven-pmd-plugin</artifactId>
           <version>${pmd.plugin.version}</version>
         </plugin>
+        <plugin>
+          <groupId>org.bsc.maven</groupId>
+          <artifactId>maven-processor-plugin</artifactId>
+          <version>5.0-rc1</version>
+        </plugin>
         <!-- some nice default compiler options -->
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
@@ -1007,6 +1061,7 @@
             <release>${maven.compiler.release}</release>
             <showDeprecation>true</showDeprecation>
             <showWarnings>true</showWarnings>
+            <verbose>false</verbose>
             <encoding>UTF-8</encoding>
             <fork>true</fork>
             <meminitial>256</meminitial>
@@ -1014,6 +1069,8 @@
             <compilerArgs>
               <arg>-XDcompilePolicy=simple</arg>
               <arg>-Xplugin:ErrorProne</arg>
+              <!--<arg>-XprintProcessorInfo</arg>
+              <arg>-J-verbose</arg>-->
             </compilerArgs>
             <compilerArguments>
               <Xmaxwarns>10000</Xmaxwarns>
@@ -1021,15 +1078,15 @@
             </compilerArguments>
             <annotationProcessorPaths>
               <path>
-                <groupId>com.google.errorprone</groupId>
-                <artifactId>error_prone_core</artifactId>
-                <version>${errorprone.version}</version>
-              </path>
-              <path>
                 <groupId>org.apache.logging.log4j</groupId>
                 <artifactId>log4j-plugins</artifactId>
                 <version>${project.version}</version>
               </path>
+              <path>
+                <groupId>com.google.errorprone</groupId>
+                <artifactId>error_prone_core</artifactId>
+                <version>${errorprone.version}</version>
+              </path>
             </annotationProcessorPaths>
             <forceJavacCompilerUse>true</forceJavacCompilerUse>
             <parameters>true</parameters>