Add module for JavaLite and fix builds
diff --git a/BUILD b/BUILD
index f1e94a5..45a39b9 100644
--- a/BUILD
+++ b/BUILD
@@ -116,6 +116,7 @@
         "src/google/protobuf/implicit_weak_message.cc",
         "src/google/protobuf/io/coded_stream.cc",
         "src/google/protobuf/io/strtod.cc",
+        "src/google/protobuf/io/io_win32.cc",
         "src/google/protobuf/io/zero_copy_stream.cc",
         "src/google/protobuf/io/zero_copy_stream_impl_lite.cc",
         "src/google/protobuf/message_lite.cc",
@@ -124,7 +125,6 @@
         "src/google/protobuf/stubs/bytestream.cc",
         "src/google/protobuf/stubs/common.cc",
         "src/google/protobuf/stubs/int128.cc",
-        "src/google/protobuf/stubs/io_win32.cc",
         "src/google/protobuf/stubs/status.cc",
         "src/google/protobuf/stubs/statusor.cc",
         "src/google/protobuf/stubs/stringpiece.cc",
@@ -514,7 +514,7 @@
 
 cc_test(
     name = "win32_test",
-    srcs = ["src/google/protobuf/stubs/io_win32_unittest.cc"],
+    srcs = ["src/google/protobuf/io/io_win32_unittest.cc"],
     deps = [
         ":protobuf_lite",
         "//external:gtest_main",
@@ -553,6 +553,7 @@
         "src/google/protobuf/extension_set_unittest.cc",
         "src/google/protobuf/generated_message_reflection_unittest.cc",
         "src/google/protobuf/io/coded_stream_unittest.cc",
+        "src/google/protobuf/io/io_win32_unittest.cc",
         "src/google/protobuf/io/printer_unittest.cc",
         "src/google/protobuf/io/tokenizer_unittest.cc",
         "src/google/protobuf/io/zero_copy_stream_unittest.cc",
@@ -572,7 +573,6 @@
         "src/google/protobuf/stubs/bytestream_unittest.cc",
         "src/google/protobuf/stubs/common_unittest.cc",
         "src/google/protobuf/stubs/int128_unittest.cc",
-        "src/google/protobuf/stubs/io_win32_unittest.cc",
         "src/google/protobuf/stubs/status_test.cc",
         "src/google/protobuf/stubs/statusor_test.cc",
         "src/google/protobuf/stubs/stringpiece_unittest.cc",
diff --git a/Makefile.am b/Makefile.am
index 9502430..903eca7 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -225,17 +225,25 @@
   java/core/src/main/java/com/google/protobuf/AbstractMessageLite.java             \
   java/core/src/main/java/com/google/protobuf/AbstractParser.java                  \
   java/core/src/main/java/com/google/protobuf/AbstractProtobufList.java            \
+  java/core/src/main/java/com/google/protobuf/AllocatedBuffer.java                 \
   java/core/src/main/java/com/google/protobuf/Android.java                         \
+  java/core/src/main/java/com/google/protobuf/ArrayDecoders.java                   \
+  java/core/src/main/java/com/google/protobuf/BinaryReader.java                    \
+  java/core/src/main/java/com/google/protobuf/BinaryWriter.java                    \
   java/core/src/main/java/com/google/protobuf/BlockingRpcChannel.java              \
   java/core/src/main/java/com/google/protobuf/BlockingService.java                 \
   java/core/src/main/java/com/google/protobuf/BooleanArrayList.java                \
+  java/core/src/main/java/com/google/protobuf/BufferAllocator.java                 \
   java/core/src/main/java/com/google/protobuf/ByteBufferWriter.java                \
   java/core/src/main/java/com/google/protobuf/ByteOutput.java                      \
   java/core/src/main/java/com/google/protobuf/ByteString.java                      \
   java/core/src/main/java/com/google/protobuf/CodedInputStream.java                \
+  java/core/src/main/java/com/google/protobuf/CodedInputStreamReader.java          \
   java/core/src/main/java/com/google/protobuf/CodedOutputStream.java               \
-  java/core/src/main/java/com/google/protobuf/DiscardUnknownFieldsParser.java      \
+  java/core/src/main/java/com/google/protobuf/CodedOutputStreamWriter.java         \
+  java/core/src/main/java/com/google/protobuf/DescriptorMessageInfoFactory.java    \
   java/core/src/main/java/com/google/protobuf/Descriptors.java                     \
+  java/core/src/main/java/com/google/protobuf/DiscardUnknownFieldsParser.java      \
   java/core/src/main/java/com/google/protobuf/DoubleArrayList.java                 \
   java/core/src/main/java/com/google/protobuf/DynamicMessage.java                  \
   java/core/src/main/java/com/google/protobuf/ExperimentalApi.java                 \
@@ -244,37 +252,65 @@
   java/core/src/main/java/com/google/protobuf/ExtensionRegistry.java               \
   java/core/src/main/java/com/google/protobuf/ExtensionRegistryFactory.java        \
   java/core/src/main/java/com/google/protobuf/ExtensionRegistryLite.java           \
+  java/core/src/main/java/com/google/protobuf/ExtensionSchema.java                 \
+  java/core/src/main/java/com/google/protobuf/ExtensionSchemaFull.java             \
+  java/core/src/main/java/com/google/protobuf/ExtensionSchemaLite.java             \
+  java/core/src/main/java/com/google/protobuf/ExtensionSchemas.java                \
+  java/core/src/main/java/com/google/protobuf/FieldInfo.java                       \
   java/core/src/main/java/com/google/protobuf/FieldSet.java                        \
+  java/core/src/main/java/com/google/protobuf/FieldType.java                       \
   java/core/src/main/java/com/google/protobuf/FloatArrayList.java                  \
   java/core/src/main/java/com/google/protobuf/GeneratedMessage.java                \
+  java/core/src/main/java/com/google/protobuf/GeneratedMessageInfoFactory.java     \
   java/core/src/main/java/com/google/protobuf/GeneratedMessageLite.java            \
   java/core/src/main/java/com/google/protobuf/GeneratedMessageV3.java              \
   java/core/src/main/java/com/google/protobuf/IntArrayList.java                    \
   java/core/src/main/java/com/google/protobuf/Internal.java                        \
   java/core/src/main/java/com/google/protobuf/InvalidProtocolBufferException.java  \
   java/core/src/main/java/com/google/protobuf/IterableByteBufferInputStream.java   \
+  java/core/src/main/java/com/google/protobuf/JavaType.java                        \
   java/core/src/main/java/com/google/protobuf/LazyField.java                       \
   java/core/src/main/java/com/google/protobuf/LazyFieldLite.java                   \
   java/core/src/main/java/com/google/protobuf/LazyStringArrayList.java             \
   java/core/src/main/java/com/google/protobuf/LazyStringList.java                  \
+  java/core/src/main/java/com/google/protobuf/ListFieldSchema.java                 \
   java/core/src/main/java/com/google/protobuf/LongArrayList.java                   \
+  java/core/src/main/java/com/google/protobuf/ManifestSchemaFactory.java           \
   java/core/src/main/java/com/google/protobuf/MapEntry.java                        \
   java/core/src/main/java/com/google/protobuf/MapEntryLite.java                    \
   java/core/src/main/java/com/google/protobuf/MapField.java                        \
   java/core/src/main/java/com/google/protobuf/MapFieldLite.java                    \
+  java/core/src/main/java/com/google/protobuf/MapFieldSchema.java                  \
+  java/core/src/main/java/com/google/protobuf/MapFieldSchemaFull.java              \
+  java/core/src/main/java/com/google/protobuf/MapFieldSchemaLite.java              \
+  java/core/src/main/java/com/google/protobuf/MapFieldSchemas.java                 \
   java/core/src/main/java/com/google/protobuf/Message.java                         \
+  java/core/src/main/java/com/google/protobuf/MessageInfo.java                     \
+  java/core/src/main/java/com/google/protobuf/MessageInfoFactory.java              \
   java/core/src/main/java/com/google/protobuf/MessageLite.java                     \
   java/core/src/main/java/com/google/protobuf/MessageLiteOrBuilder.java            \
   java/core/src/main/java/com/google/protobuf/MessageLiteToString.java             \
   java/core/src/main/java/com/google/protobuf/MessageOrBuilder.java                \
   java/core/src/main/java/com/google/protobuf/MessageReflection.java               \
+  java/core/src/main/java/com/google/protobuf/MessageSchema.java                   \
+  java/core/src/main/java/com/google/protobuf/MessageSetSchema.java                \
   java/core/src/main/java/com/google/protobuf/MutabilityOracle.java                \
+  java/core/src/main/java/com/google/protobuf/NewInstanceSchema.java               \
+  java/core/src/main/java/com/google/protobuf/NewInstanceSchemaFull.java           \
+  java/core/src/main/java/com/google/protobuf/NewInstanceSchemaLite.java           \
+  java/core/src/main/java/com/google/protobuf/NewInstanceSchemas.java              \
   java/core/src/main/java/com/google/protobuf/NioByteString.java                   \
+  java/core/src/main/java/com/google/protobuf/OneofInfo.java                       \
   java/core/src/main/java/com/google/protobuf/Parser.java                          \
   java/core/src/main/java/com/google/protobuf/PrimitiveNonBoxingCollection.java    \
+  java/core/src/main/java/com/google/protobuf/ProtoSyntax.java                     \
+  java/core/src/main/java/com/google/protobuf/Protobuf.java                        \
   java/core/src/main/java/com/google/protobuf/ProtobufArrayList.java               \
+  java/core/src/main/java/com/google/protobuf/ProtobufLists.java                   \
   java/core/src/main/java/com/google/protobuf/ProtocolMessageEnum.java             \
   java/core/src/main/java/com/google/protobuf/ProtocolStringList.java              \
+  java/core/src/main/java/com/google/protobuf/RawMessageInfo.java                  \
+  java/core/src/main/java/com/google/protobuf/Reader.java                          \
   java/core/src/main/java/com/google/protobuf/RepeatedFieldBuilder.java            \
   java/core/src/main/java/com/google/protobuf/RepeatedFieldBuilderV3.java          \
   java/core/src/main/java/com/google/protobuf/RopeByteString.java                  \
@@ -282,30 +318,47 @@
   java/core/src/main/java/com/google/protobuf/RpcChannel.java                      \
   java/core/src/main/java/com/google/protobuf/RpcController.java                   \
   java/core/src/main/java/com/google/protobuf/RpcUtil.java                         \
+  java/core/src/main/java/com/google/protobuf/Schema.java                          \
+  java/core/src/main/java/com/google/protobuf/SchemaFactory.java                   \
+  java/core/src/main/java/com/google/protobuf/SchemaUtil.java                      \
   java/core/src/main/java/com/google/protobuf/Service.java                         \
   java/core/src/main/java/com/google/protobuf/ServiceException.java                \
   java/core/src/main/java/com/google/protobuf/SingleFieldBuilder.java              \
   java/core/src/main/java/com/google/protobuf/SingleFieldBuilderV3.java            \
   java/core/src/main/java/com/google/protobuf/SmallSortedMap.java                  \
+  java/core/src/main/java/com/google/protobuf/StructuralMessageInfo.java           \
   java/core/src/main/java/com/google/protobuf/TextFormat.java                      \
   java/core/src/main/java/com/google/protobuf/TextFormatEscaper.java               \
   java/core/src/main/java/com/google/protobuf/TextFormatParseInfoTree.java         \
   java/core/src/main/java/com/google/protobuf/TextFormatParseLocation.java         \
   java/core/src/main/java/com/google/protobuf/UninitializedMessageException.java   \
+  java/core/src/main/java/com/google/protobuf/UnknownFieldSchema.java              \
   java/core/src/main/java/com/google/protobuf/UnknownFieldSet.java                 \
   java/core/src/main/java/com/google/protobuf/UnknownFieldSetLite.java             \
+  java/core/src/main/java/com/google/protobuf/UnknownFieldSetLiteSchema.java       \
+  java/core/src/main/java/com/google/protobuf/UnknownFieldSetSchema.java           \
   java/core/src/main/java/com/google/protobuf/UnmodifiableLazyStringList.java      \
   java/core/src/main/java/com/google/protobuf/UnsafeByteOperations.java            \
   java/core/src/main/java/com/google/protobuf/UnsafeUtil.java                      \
   java/core/src/main/java/com/google/protobuf/Utf8.java                            \
   java/core/src/main/java/com/google/protobuf/WireFormat.java                      \
+  java/core/src/main/java/com/google/protobuf/Writer.java                          \
   java/core/src/test/java/com/google/protobuf/AbstractMessageTest.java             \
+  java/core/src/test/java/com/google/protobuf/AbstractProto2LiteSchemaTest.java    \
+  java/core/src/test/java/com/google/protobuf/AbstractProto2SchemaTest.java        \
+  java/core/src/test/java/com/google/protobuf/AbstractProto3LiteSchemaTest.java    \
+  java/core/src/test/java/com/google/protobuf/AbstractProto3SchemaTest.java        \
+  java/core/src/test/java/com/google/protobuf/AbstractSchemaTest.java              \
   java/core/src/test/java/com/google/protobuf/AnyTest.java                         \
+  java/core/src/test/java/com/google/protobuf/ArrayDecodersTest.java               \
+  java/core/src/test/java/com/google/protobuf/BinaryProtocolTest.java              \
   java/core/src/test/java/com/google/protobuf/BooleanArrayListTest.java            \
   java/core/src/test/java/com/google/protobuf/BoundedByteStringTest.java           \
   java/core/src/test/java/com/google/protobuf/ByteBufferWriterTest.java            \
   java/core/src/test/java/com/google/protobuf/ByteStringTest.java                  \
+  java/core/src/test/java/com/google/protobuf/CachedFieldSizeTest.java             \
   java/core/src/test/java/com/google/protobuf/CheckUtf8Test.java                   \
+  java/core/src/test/java/com/google/protobuf/CodedAdapterTest.java                \
   java/core/src/test/java/com/google/protobuf/CodedInputStreamTest.java            \
   java/core/src/test/java/com/google/protobuf/CodedOutputStreamTest.java           \
   java/core/src/test/java/com/google/protobuf/DecodeUtf8Test.java                  \
@@ -315,6 +368,9 @@
   java/core/src/test/java/com/google/protobuf/DoubleArrayListTest.java             \
   java/core/src/test/java/com/google/protobuf/DynamicMessageTest.java              \
   java/core/src/test/java/com/google/protobuf/EnumTest.java                        \
+  java/core/src/test/java/com/google/protobuf/ExperimentalMessageFactory.java      \
+  java/core/src/test/java/com/google/protobuf/ExperimentalSerializationUtil.java   \
+  java/core/src/test/java/com/google/protobuf/ExperimentalTestDataProvider.java    \
   java/core/src/test/java/com/google/protobuf/ExtensionRegistryFactoryTest.java    \
   java/core/src/test/java/com/google/protobuf/FieldPresenceTest.java               \
   java/core/src/test/java/com/google/protobuf/FloatArrayListTest.java              \
@@ -329,17 +385,32 @@
   java/core/src/test/java/com/google/protobuf/LazyStringArrayListTest.java         \
   java/core/src/test/java/com/google/protobuf/LazyStringEndToEndTest.java          \
   java/core/src/test/java/com/google/protobuf/LiteEqualsAndHashTest.java           \
-  java/core/src/test/java/com/google/protobuf/LiteTest.java                        \
   java/core/src/test/java/com/google/protobuf/LiteralByteStringTest.java           \
   java/core/src/test/java/com/google/protobuf/LongArrayListTest.java               \
   java/core/src/test/java/com/google/protobuf/MapForProto2LiteTest.java            \
   java/core/src/test/java/com/google/protobuf/MapForProto2Test.java                \
+  java/core/src/test/java/com/google/protobuf/MapLiteTest.java                     \
   java/core/src/test/java/com/google/protobuf/MapTest.java                         \
   java/core/src/test/java/com/google/protobuf/MessageTest.java                     \
   java/core/src/test/java/com/google/protobuf/NestedBuildersTest.java              \
   java/core/src/test/java/com/google/protobuf/NioByteStringTest.java               \
+  java/core/src/test/java/com/google/protobuf/PackedFieldTest.java                 \
   java/core/src/test/java/com/google/protobuf/ParseExceptionsTest.java             \
+  java/core/src/test/java/com/google/protobuf/ParserLiteTest.java                  \
   java/core/src/test/java/com/google/protobuf/ParserTest.java                      \
+  java/core/src/test/java/com/google/protobuf/Proto2ExtensionLookupSchemaTest.java \
+  java/core/src/test/java/com/google/protobuf/Proto2LiteSchemaTest.java            \
+  java/core/src/test/java/com/google/protobuf/Proto2MessageFactory.java            \
+  java/core/src/test/java/com/google/protobuf/Proto2MessageInfoFactory.java        \
+  java/core/src/test/java/com/google/protobuf/Proto2MessageLiteFactory.java        \
+  java/core/src/test/java/com/google/protobuf/Proto2SchemaTest.java                \
+  java/core/src/test/java/com/google/protobuf/Proto2UnknownEnumValueTest.java      \
+  java/core/src/test/java/com/google/protobuf/Proto3LiteSchemaTest.java            \
+  java/core/src/test/java/com/google/protobuf/Proto3MessageFactory.java            \
+  java/core/src/test/java/com/google/protobuf/Proto3MessageInfoFactory.java        \
+  java/core/src/test/java/com/google/protobuf/Proto3MessageLiteFactory.java        \
+  java/core/src/test/java/com/google/protobuf/Proto3MessageLiteInfoFactory.java    \
+  java/core/src/test/java/com/google/protobuf/Proto3SchemaTest.java                \
   java/core/src/test/java/com/google/protobuf/ProtobufArrayListTest.java           \
   java/core/src/test/java/com/google/protobuf/RepeatedFieldBuilderV3Test.java      \
   java/core/src/test/java/com/google/protobuf/RopeByteStringSubstringTest.java     \
@@ -349,18 +420,25 @@
   java/core/src/test/java/com/google/protobuf/SmallSortedMapTest.java              \
   java/core/src/test/java/com/google/protobuf/TestBadIdentifiers.java              \
   java/core/src/test/java/com/google/protobuf/TestBadIdentifiersLite.java          \
+  java/core/src/test/java/com/google/protobuf/TestSchemas.java                     \
+  java/core/src/test/java/com/google/protobuf/TestSchemasLite.java                 \
   java/core/src/test/java/com/google/protobuf/TestUtil.java                        \
   java/core/src/test/java/com/google/protobuf/TestUtilLite.java                    \
   java/core/src/test/java/com/google/protobuf/TextFormatParseInfoTreeTest.java     \
   java/core/src/test/java/com/google/protobuf/TextFormatParseLocationTest.java     \
   java/core/src/test/java/com/google/protobuf/TextFormatTest.java                  \
   java/core/src/test/java/com/google/protobuf/UnknownEnumValueTest.java            \
-  java/core/src/test/java/com/google/protobuf/UnknownFieldSetLiteTest.java         \
   java/core/src/test/java/com/google/protobuf/UnknownFieldSetTest.java             \
   java/core/src/test/java/com/google/protobuf/UnmodifiableLazyStringListTest.java  \
+  java/core/src/test/java/com/google/protobuf/Utf8Test.java                        \
+  java/core/src/test/java/com/google/protobuf/Utf8Utils.java                       \
   java/core/src/test/java/com/google/protobuf/WellKnownTypesTest.java              \
+  java/core/src/test/java/com/google/protobuf/WireFormatLiteTest.java              \
   java/core/src/test/java/com/google/protobuf/WireFormatTest.java                  \
+  java/core/src/test/java/com/google/protobuf/WrappersLiteOfMethodTest.java        \
+  java/core/src/test/java/com/google/protobuf/WrappersOfMethodTest.java            \
   java/core/src/test/proto/com/google/protobuf/any_test.proto                      \
+  java/core/src/test/proto/com/google/protobuf/cached_field_size_test.proto        \
   java/core/src/test/proto/com/google/protobuf/deprecated_file.proto               \
   java/core/src/test/proto/com/google/protobuf/field_presence_test.proto           \
   java/core/src/test/proto/com/google/protobuf/lazy_fields_lite.proto              \
@@ -370,6 +448,7 @@
   java/core/src/test/proto/com/google/protobuf/map_initialization_order_test.proto \
   java/core/src/test/proto/com/google/protobuf/map_lite_test.proto                 \
   java/core/src/test/proto/com/google/protobuf/map_test.proto                      \
+  java/core/src/test/proto/com/google/protobuf/message_lite_extension_util_test.proto\
   java/core/src/test/proto/com/google/protobuf/multiple_files_test.proto           \
   java/core/src/test/proto/com/google/protobuf/nested_builders_test.proto          \
   java/core/src/test/proto/com/google/protobuf/nested_extension.proto              \
@@ -379,13 +458,26 @@
   java/core/src/test/proto/com/google/protobuf/outer_class_name_test.proto         \
   java/core/src/test/proto/com/google/protobuf/outer_class_name_test2.proto        \
   java/core/src/test/proto/com/google/protobuf/outer_class_name_test3.proto        \
+  java/core/src/test/proto/com/google/protobuf/packed_field_test.proto             \
+  java/core/src/test/proto/com/google/protobuf/proto2_message.proto                \
+  java/core/src/test/proto/com/google/protobuf/proto2_message_lite.proto           \
   java/core/src/test/proto/com/google/protobuf/proto2_unknown_enum_values.proto    \
+  java/core/src/test/proto/com/google/protobuf/proto3_message.proto                \
+  java/core/src/test/proto/com/google/protobuf/proto3_message_lite.proto           \
   java/core/src/test/proto/com/google/protobuf/test_bad_identifiers.proto          \
   java/core/src/test/proto/com/google/protobuf/test_check_utf8.proto               \
   java/core/src/test/proto/com/google/protobuf/test_check_utf8_size.proto          \
   java/core/src/test/proto/com/google/protobuf/test_custom_options.proto           \
   java/core/src/test/proto/com/google/protobuf/test_extra_interfaces.proto         \
+  java/core/src/test/proto/com/google/protobuf/wrappers_test.proto                 \
   java/lite.md                                                                     \
+  java/lite/generate-sources-build.xml                                             \
+  java/lite/generate-test-sources-build.xml                                        \
+  java/lite/lite.awk                                                               \
+  java/lite/pom.xml                                                                \
+  java/lite/process-lite-sources-build.xml                                         \
+  java/lite/src/test/java/com/google/protobuf/LiteTest.java                        \
+  java/lite/src/test/java/com/google/protobuf/Proto2MessageLiteInfoFactory.java    \
   java/pom.xml                                                                     \
   java/util/pom.xml                                                                \
   java/util/src/main/java/com/google/protobuf/util/Durations.java                  \
@@ -812,6 +904,7 @@
   python/google/protobuf/internal/import_test_package/inner.proto            \
   python/google/protobuf/internal/import_test_package/outer.proto            \
   python/google/protobuf/internal/json_format_test.py                        \
+  python/google/protobuf/internal/keywords_test.py                           \
   python/google/protobuf/internal/message_factory_test.py                    \
   python/google/protobuf/internal/message_listener.py                        \
   python/google/protobuf/internal/message_set_extensions.proto               \
@@ -879,7 +972,6 @@
   python/google/protobuf/pyext/repeated_scalar_container.h                   \
   python/google/protobuf/pyext/safe_numerics.h                               \
   python/google/protobuf/pyext/scoped_pyobject_ptr.h                         \
-  python/google/protobuf/pyext/thread_unsafe_shared_ptr.h                    \
   python/google/protobuf/reflection.py                                       \
   python/google/protobuf/service.py                                          \
   python/google/protobuf/service_reflection.py                               \
diff --git a/conformance/Makefile.am b/conformance/Makefile.am
index 495b462..e47fd10 100644
--- a/conformance/Makefile.am
+++ b/conformance/Makefile.am
@@ -362,7 +362,7 @@
 # These depend on library paths being properly set up.  The easiest way to
 # run them is to just use "tox" from the python dir.
 test_python: protoc_middleman conformance-test-runner
-	./conformance-test-runner --enforce_recommended --failure_list failure_list_python.txt ./conformance_python.py
+	./conformance-test-runner --enforce_recommended --failure_list failure_list_python.txt --text_format_failure_list text_format_failure_list_python.txt ./conformance_python.py
 
 test_python_cpp: protoc_middleman conformance-test-runner
 	./conformance-test-runner --enforce_recommended --failure_list failure_list_python_cpp.txt ./conformance_python.py
diff --git a/csharp/src/Google.Protobuf.Test/testprotos.pb b/csharp/src/Google.Protobuf.Test/testprotos.pb
index b66c4ee..9c68af0 100644
--- a/csharp/src/Google.Protobuf.Test/testprotos.pb
+++ b/csharp/src/Google.Protobuf.Test/testprotos.pb
Binary files differ
diff --git a/csharp/src/Google.Protobuf/WellKnownTypes/Timestamp.cs b/csharp/src/Google.Protobuf/WellKnownTypes/Timestamp.cs
index 2e5809f..9df237c 100644
--- a/csharp/src/Google.Protobuf/WellKnownTypes/Timestamp.cs
+++ b/csharp/src/Google.Protobuf/WellKnownTypes/Timestamp.cs
@@ -113,11 +113,13 @@
   /// 01:30 UTC on January 15, 2017.
   ///
   /// In JavaScript, one can convert a Date object to this format using the
-  /// standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)
+  /// standard
+  /// [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)
   /// method. In Python, a standard `datetime.datetime` object can be converted
-  /// to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime)
-  /// with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one
-  /// can use the Joda Time's [`ISODateTimeFormat.dateTime()`](
+  /// to this format using
+  /// [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with
+  /// the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use
+  /// the Joda Time's [`ISODateTimeFormat.dateTime()`](
   /// http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D
   /// ) to obtain a formatter capable of generating timestamps in this format.
   /// </summary>
diff --git a/java/core/generate-test-sources-build.xml b/java/core/generate-test-sources-build.xml
index 6016353..92c0b1c 100644
--- a/java/core/generate-test-sources-build.xml
+++ b/java/core/generate-test-sources-build.xml
@@ -5,43 +5,56 @@
         <arg value="--proto_path=${protobuf.source.dir}"/>
         <arg value="--proto_path=${test.proto.dir}"/>
         <arg value="${protobuf.source.dir}/google/protobuf/unittest.proto"/>
-        <arg value="${protobuf.source.dir}/google/protobuf/unittest_proto3.proto"/>
+        <arg value="${protobuf.source.dir}/google/protobuf/unittest_custom_options.proto"/>
+        <arg value="${protobuf.source.dir}/google/protobuf/unittest_enormous_descriptor.proto"/>
         <arg value="${protobuf.source.dir}/google/protobuf/unittest_import.proto"/>
+        <arg value="${protobuf.source.dir}/google/protobuf/unittest_import_lite.proto"/>
         <arg value="${protobuf.source.dir}/google/protobuf/unittest_import_public.proto"/>
+        <arg value="${protobuf.source.dir}/google/protobuf/unittest_import_public_lite.proto"/>
+        <arg value="${protobuf.source.dir}/google/protobuf/unittest_lite.proto"/>
         <arg value="${protobuf.source.dir}/google/protobuf/unittest_mset.proto"/>
         <arg value="${protobuf.source.dir}/google/protobuf/unittest_mset_wire_format.proto"/>
-        <arg value="${protobuf.source.dir}/google/protobuf/unittest_optimize_for.proto"/>
-        <arg value="${protobuf.source.dir}/google/protobuf/unittest_custom_options.proto"/>
-        <arg value="${protobuf.source.dir}/google/protobuf/unittest_lite.proto"/>
-        <arg value="${protobuf.source.dir}/google/protobuf/unittest_import_lite.proto"/>
-        <arg value="${protobuf.source.dir}/google/protobuf/unittest_import_public_lite.proto"/>
-        <arg value="${protobuf.source.dir}/google/protobuf/unittest_lite_imports_nonlite.proto"/>
-        <arg value="${protobuf.source.dir}/google/protobuf/unittest_enormous_descriptor.proto"/>
         <arg value="${protobuf.source.dir}/google/protobuf/unittest_no_generic_services.proto"/>
+        <arg value="${protobuf.source.dir}/google/protobuf/unittest_optimize_for.proto"/>
+        <arg value="${protobuf.source.dir}/google/protobuf/unittest_proto3.proto"/>
         <arg value="${protobuf.source.dir}/google/protobuf/unittest_well_known_types.proto"/>
+        <arg value="${test.proto.dir}/com/google/protobuf/any_test.proto"/>
+        <arg value="${test.proto.dir}/com/google/protobuf/cached_field_size_test.proto"/>
         <arg value="${test.proto.dir}/com/google/protobuf/deprecated_file.proto"/>
+        <arg value="${test.proto.dir}/com/google/protobuf/field_presence_test.proto"/>
         <arg value="${test.proto.dir}/com/google/protobuf/lazy_fields_lite.proto"/>
         <arg value="${test.proto.dir}/com/google/protobuf/lite_equals_and_hash.proto"/>
+        <arg value="${test.proto.dir}/com/google/protobuf/map_for_proto2_lite_test.proto"/>
+        <arg value="${test.proto.dir}/com/google/protobuf/map_for_proto2_test.proto"/>
+        <arg value="${test.proto.dir}/com/google/protobuf/map_initialization_order_test.proto"/>
+        <arg value="${test.proto.dir}/com/google/protobuf/map_lite_test.proto"/>
+        <arg value="${test.proto.dir}/com/google/protobuf/map_test.proto"/>
+        <arg value="${test.proto.dir}/com/google/protobuf/message_lite_extension_util_test.proto"/>
         <arg value="${test.proto.dir}/com/google/protobuf/multiple_files_test.proto"/>
         <arg value="${test.proto.dir}/com/google/protobuf/nested_builders_test.proto"/>
         <arg value="${test.proto.dir}/com/google/protobuf/nested_extension.proto"/>
-        <arg value="${test.proto.dir}/com/google/protobuf/nested_extension_lite.proto"/>
         <arg value="${test.proto.dir}/com/google/protobuf/non_nested_extension.proto"/>
-        <arg value="${test.proto.dir}/com/google/protobuf/non_nested_extension_lite.proto"/>
         <arg value="${test.proto.dir}/com/google/protobuf/outer_class_name_test.proto"/>
         <arg value="${test.proto.dir}/com/google/protobuf/outer_class_name_test2.proto"/>
-	<arg value="${test.proto.dir}/com/google/protobuf/outer_class_name_test3.proto"/>
-	<arg value="${test.proto.dir}/com/google/protobuf/proto2_unknown_enum_values.proto"/>
+        <arg value="${test.proto.dir}/com/google/protobuf/outer_class_name_test3.proto"/>
+        <arg value="${test.proto.dir}/com/google/protobuf/packed_field_test.proto"/>
+        <arg value="${test.proto.dir}/com/google/protobuf/proto2_message.proto"/>
+        <arg value="${test.proto.dir}/com/google/protobuf/proto2_message_lite.proto"/>
+        <arg value="${test.proto.dir}/com/google/protobuf/proto2_unknown_enum_values.proto"/>
+        <arg value="${test.proto.dir}/com/google/protobuf/proto3_message.proto"/>
+        <arg value="${test.proto.dir}/com/google/protobuf/proto3_message_lite.proto"/>
         <arg value="${test.proto.dir}/com/google/protobuf/test_bad_identifiers.proto"/>
         <arg value="${test.proto.dir}/com/google/protobuf/test_check_utf8.proto"/>
         <arg value="${test.proto.dir}/com/google/protobuf/test_check_utf8_size.proto"/>
         <arg value="${test.proto.dir}/com/google/protobuf/test_custom_options.proto"/>
-        <arg value="${test.proto.dir}/com/google/protobuf/any_test.proto"/>
-        <arg value="${test.proto.dir}/com/google/protobuf/field_presence_test.proto"/>
-        <arg value="${test.proto.dir}/com/google/protobuf/map_for_proto2_lite_test.proto"/>
-        <arg value="${test.proto.dir}/com/google/protobuf/map_for_proto2_test.proto"/>
-        <arg value="${test.proto.dir}/com/google/protobuf/map_lite_test.proto"/>
-        <arg value="${test.proto.dir}/com/google/protobuf/map_test.proto"/>
-        <arg value="${test.proto.dir}/com/google/protobuf/map_initialization_order_test.proto"/>
+        <arg value="${test.proto.dir}/com/google/protobuf/wrappers_test.proto"/>
+    </exec>
+    <!-- Also generate some Lite protos needed for ExtensionRegistryFactoryTest -->
+    <exec executable="${protoc}">
+        <arg value="--java_out=lite:${generated.testsources.dir}"/>
+        <arg value="--proto_path=${protobuf.source.dir}"/>
+        <arg value="--proto_path=${test.proto.dir}"/>
+        <arg value="${test.proto.dir}/com/google/protobuf/nested_extension_lite.proto"/>
+        <arg value="${test.proto.dir}/com/google/protobuf/non_nested_extension_lite.proto"/>
     </exec>
 </project>
diff --git a/java/lite/generate-sources-build.xml b/java/lite/generate-sources-build.xml
new file mode 100644
index 0000000..74d96a2
--- /dev/null
+++ b/java/lite/generate-sources-build.xml
@@ -0,0 +1,19 @@
+<project name="generate-sources">
+    <echo message="Running protoc ..."/>
+    <mkdir dir="${generated.sources.dir}"/>
+    <exec executable="${protoc}">
+        <arg value="--java_out=lite:${generated.sources.dir}"/>
+        <arg value="--proto_path=${protobuf.source.dir}"/>
+        <arg value="${protobuf.source.dir}/google/protobuf/any.proto"/>
+        <arg value="${protobuf.source.dir}/google/protobuf/api.proto"/>
+        <arg value="${protobuf.source.dir}/google/protobuf/duration.proto"/>
+        <arg value="${protobuf.source.dir}/google/protobuf/empty.proto"/>
+        <arg value="${protobuf.source.dir}/google/protobuf/field_mask.proto"/>
+        <arg value="${protobuf.source.dir}/google/protobuf/source_context.proto"/>
+        <arg value="${protobuf.source.dir}/google/protobuf/struct.proto"/>
+        <arg value="${protobuf.source.dir}/google/protobuf/timestamp.proto"/>
+        <arg value="${protobuf.source.dir}/google/protobuf/type.proto"/>
+        <arg value="${protobuf.source.dir}/google/protobuf/wrappers.proto"/>
+    </exec>
+</project>
+
diff --git a/java/lite/generate-test-sources-build.xml b/java/lite/generate-test-sources-build.xml
new file mode 100644
index 0000000..1c1a18c
--- /dev/null
+++ b/java/lite/generate-test-sources-build.xml
@@ -0,0 +1,50 @@
+<project name="generate-test-sources">
+    <mkdir dir="${generated.testsources.dir}"/>
+    <exec executable="${protoc}">
+        <arg value="--java_out=lite:${generated.testsources.dir}"/>
+        <arg value="--proto_path=${protobuf.source.dir}"/>
+        <arg value="--proto_path=${protobuf.basedir}/java/core/${test.proto.dir}"/>
+        <arg value="${protobuf.source.dir}/google/protobuf/unittest.proto"/>
+        <arg value="${protobuf.source.dir}/google/protobuf/unittest_import.proto"/>
+        <arg value="${protobuf.source.dir}/google/protobuf/unittest_import_lite.proto"/>
+        <arg value="${protobuf.source.dir}/google/protobuf/unittest_import_public.proto"/>
+        <arg value="${protobuf.source.dir}/google/protobuf/unittest_import_public_lite.proto"/>
+        <arg value="${protobuf.source.dir}/google/protobuf/unittest_lite.proto"/>
+        <arg value="${protobuf.source.dir}/google/protobuf/unittest_mset.proto"/>
+        <arg value="${protobuf.source.dir}/google/protobuf/unittest_mset_wire_format.proto"/>
+        <arg value="${protobuf.source.dir}/google/protobuf/unittest_no_generic_services.proto"/>
+        <arg value="${protobuf.source.dir}/google/protobuf/unittest_optimize_for.proto"/>
+        <arg value="${protobuf.source.dir}/google/protobuf/unittest_proto3.proto"/>
+        <arg value="${protobuf.source.dir}/google/protobuf/unittest_well_known_types.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/any_test.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/cached_field_size_test.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/deprecated_file.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/field_presence_test.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/lazy_fields_lite.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/lite_equals_and_hash.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/map_for_proto2_lite_test.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/map_for_proto2_test.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/map_initialization_order_test.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/map_lite_test.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/map_test.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/message_lite_extension_util_test.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/nested_builders_test.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/nested_extension.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/nested_extension_lite.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/non_nested_extension.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/non_nested_extension_lite.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/outer_class_name_test.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/outer_class_name_test2.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/outer_class_name_test3.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/packed_field_test.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/proto2_message.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/proto2_message_lite.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/proto2_unknown_enum_values.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/proto3_message.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/proto3_message_lite.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/test_bad_identifiers.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/test_check_utf8.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/test_check_utf8_size.proto"/>
+        <arg value="${protobuf.basedir}/java/core/${test.proto.dir}/com/google/protobuf/wrappers_test.proto"/>
+    </exec>
+</project>
diff --git a/java/lite/lite.awk b/java/lite/lite.awk
new file mode 100644
index 0000000..b22d965
--- /dev/null
+++ b/java/lite/lite.awk
@@ -0,0 +1,25 @@
+# Remove code enclosed by "BEGIN FULL-RUNTIME" and "END FULL-RUNTIME" to
+# create the lite-only version of a test file.
+
+BEGIN {
+  in_full_runtime = 0;
+}
+
+/BEGIN FULL-RUNTIME/ {
+  in_full_runtime = 1;
+  next;
+}
+
+/END FULL-RUNTIME/ {
+  in_full_runtime = 0;
+  next;
+}
+
+in_full_runtime {
+  # Skip full runtime code path.
+  next;
+}
+
+{
+  print;
+}
diff --git a/java/lite/pom.xml b/java/lite/pom.xml
new file mode 100644
index 0000000..f63e275
--- /dev/null
+++ b/java/lite/pom.xml
@@ -0,0 +1,344 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>com.google.protobuf</groupId>
+    <artifactId>protobuf-parent</artifactId>
+    <version>3.7.0</version>
+  </parent>
+
+  <artifactId>protobuf-javalite</artifactId>
+  <packaging>bundle</packaging>
+
+  <name>Protocol Buffers [Lite]</name>
+  <description>
+    Lite version of Protocol Buffers library. This version is optimized for code size, but does
+    not guarantee API/ABI stability.
+  </description>
+
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.easymock</groupId>
+      <artifactId>easymock</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.easymock</groupId>
+      <artifactId>easymockclassextension</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.google.guava</groupId>
+      <artifactId>guava</artifactId>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+     <!-- Include core protos in the bundle as resources -->
+     <resources>
+      <resource>
+        <directory>${protobuf.source.dir}</directory>
+        <includes>
+          <include>google/protobuf/any.proto</include>
+          <include>google/protobuf/api.proto</include>
+          <include>google/protobuf/empty.proto</include>
+          <include>google/protobuf/field_mask.proto</include>
+          <include>google/protobuf/source_context.proto</include>
+          <include>google/protobuf/struct.proto</include>
+          <include>google/protobuf/timestamp.proto</include>
+          <include>google/protobuf/type.proto</include>
+          <include>google/protobuf/wrappers.proto</include>
+        </includes>
+      </resource>
+    </resources>
+    <testResources>
+      <testResource>
+        <directory>${protobuf.source.dir}</directory>
+        <includes>
+          <include>google/protobuf/testdata/golden_message_oneof_implemented</include>
+          <include>google/protobuf/testdata/golden_packed_fields_message</include>
+        </includes>
+      </testResource>
+    </testResources>
+
+    <plugins>
+      <plugin>
+        <artifactId>maven-resources-plugin</artifactId>
+        <version>3.1.0</version>
+        <executions>
+          <execution>
+            <id>copy-source-files</id>
+            <phase>generate-sources</phase>
+            <goals>
+              <goal>copy-resources</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>${generated.sources.dir}/com/google/protobuf</outputDirectory>
+              <resources>
+                <resource>
+                  <directory>${basedir}/../core/src/main/java/com/google/protobuf</directory>
+                  <includes>
+                    <include>AbstractMessageLite.java</include>
+                    <include>AbstractParser.java</include>
+                    <include>AbstractProtobufList.java</include>
+                    <include>AllocatedBuffer.java</include>
+                    <include>Android.java</include>
+                    <include>ArrayDecoders.java</include>
+                    <include>BinaryReader.java</include>
+                    <include>BinaryWriter.java</include>
+                    <include>BooleanArrayList.java</include>
+                    <include>BufferAllocator.java</include>
+                    <include>ByteBufferWriter.java</include>
+                    <include>ByteOutput.java</include>
+                    <include>ByteString.java</include>
+                    <include>CodedInputStream.java</include>
+                    <include>CodedInputStreamReader.java</include>
+                    <include>CodedOutputStream.java</include>
+                    <include>CodedOutputStreamWriter.java</include>
+                    <include>DoubleArrayList.java</include>
+                    <include>ExperimentalApi.java</include>
+                    <include>ExtensionLite.java</include>
+                    <include>ExtensionRegistryFactory.java</include>
+                    <include>ExtensionRegistryLite.java</include>
+                    <include>ExtensionSchema.java</include>
+                    <include>ExtensionSchemaLite.java</include>
+                    <include>ExtensionSchemas.java</include>
+                    <include>FieldInfo.java</include>
+                    <include>FieldSet.java</include>
+                    <include>FieldType.java</include>
+                    <include>FloatArrayList.java</include>
+                    <include>GeneratedExtensionRegistryLoader.java</include>
+                    <include>GeneratedMessageInfoFactory.java</include>
+                    <include>GeneratedMessageLite.java</include>
+                    <include>IntArrayList.java</include>
+                    <include>Internal.java</include>
+                    <include>InvalidProtocolBufferException.java</include>
+                    <include>IterableByteBufferInputStream.java</include>
+                    <include>JavaType.java</include>
+                    <include>LazyField.java</include>
+                    <include>LazyFieldLite.java</include>
+                    <include>LazyStringArrayList.java</include>
+                    <include>LazyStringList.java</include>
+                    <include>ListFieldSchema.java</include>
+                    <include>LongArrayList.java</include>
+                    <include>ManifestSchemaFactory.java</include>
+                    <include>MapEntryLite.java</include>
+                    <include>MapFieldLite.java</include>
+                    <include>MapFieldSchema.java</include>
+                    <include>MapFieldSchemaLite.java</include>
+                    <include>MapFieldSchemas.java</include>
+                    <include>MessageInfo.java</include>
+                    <include>MessageInfoFactory.java</include>
+                    <include>MessageLite.java</include>
+                    <include>MessageLiteOrBuilder.java</include>
+                    <include>MessageLiteToString.java</include>
+                    <include>MessageSchema.java</include>
+                    <include>MessageSetSchema.java</include>
+                    <include>MutabilityOracle.java</include>
+                    <include>NewInstanceSchema.java</include>
+                    <include>NewInstanceSchemaLite.java</include>
+                    <include>NewInstanceSchemas.java</include>
+                    <include>NioByteString.java</include>
+                    <include>OneofInfo.java</include>
+                    <include>Parser.java</include>
+                    <include>PrimitiveNonBoxingCollection.java</include>
+                    <include>ProtoField.java</include>
+                    <include>ProtoMessage.java</include>
+                    <include>ProtoOneof.java</include>
+                    <include>ProtoOneofCase.java</include>
+                    <include>ProtoPresenceBits.java</include>
+                    <include>ProtoPresenceCheckedField.java</include>
+                    <include>ProtoSyntax.java</include>
+                    <include>Protobuf.java</include>
+                    <include>ProtobufArrayList.java</include>
+                    <include>ProtobufLists.java</include>
+                    <include>ProtocolStringList.java</include>
+                    <include>RawMessageInfo.java</include>
+                    <include>Reader.java</include>
+                    <include>RopeByteString.java</include>
+                    <include>Schema.java</include>
+                    <include>SchemaFactory.java</include>
+                    <include>SchemaUtil.java</include>
+                    <include>SmallSortedMap.java</include>
+                    <include>StructuralMessageInfo.java</include>
+                    <include>TextFormatEscaper.java</include>
+                    <include>UninitializedMessageException.java</include>
+                    <include>UnknownFieldSchema.java</include>
+                    <include>UnknownFieldSetLite.java</include>
+                    <include>UnknownFieldSetLiteSchema.java</include>
+                    <include>UnmodifiableLazyStringList.java</include>
+                    <include>UnsafeUtil.java</include>
+                    <include>Utf8.java</include>
+                    <include>WireFormat.java</include>
+                    <include>Writer.java</include>
+                  </includes>
+                </resource>
+              </resources>
+            </configuration>
+          </execution>
+          <execution>
+            <id>copy-test-source-files</id>
+            <phase>generate-test-sources</phase>
+            <goals>
+              <goal>copy-resources</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>${generated.testsources.dir}/com/google/protobuf</outputDirectory>
+              <resources>
+                <resource>
+                  <directory>${basedir}/../core/src/test/java/com/google/protobuf</directory>
+                  <!-- For sources, we want to be explicit about what we add so we don't accidentally
+                  increase the size of the lite runtime library. For tests, we want to be defensive
+                  and exclude only the full runtime exclusive tests so we don't accidentally miss
+                  any test. -->
+                  <excludes>
+                    <exclude>AbstractMessageTest.java</exclude>
+                    <exclude>AbstractProto2SchemaTest.java</exclude>
+                    <exclude>AnyTest.java</exclude>
+                    <exclude>CodedInputStreamTest.java</exclude>
+                    <exclude>DeprecatedFieldTest.java</exclude>
+                    <exclude>DescriptorsTest.java</exclude>
+                    <exclude>DiscardUnknownFieldsTest.java</exclude>
+                    <exclude>DynamicMessageTest.java</exclude>
+                    <exclude>ExtensionRegistryFactoryTest.java</exclude>
+                    <exclude>FieldPresenceTest.java</exclude>
+                    <exclude>ForceFieldBuildersPreRun.java</exclude>
+                    <exclude>GeneratedMessageTest.java</exclude>
+                    <exclude>LazyFieldTest.java</exclude>
+                    <exclude>LazyStringEndToEndTest.java</exclude>
+                    <exclude>MapForProto2Test.java</exclude>
+                    <exclude>MapTest.java</exclude>
+                    <exclude>MessageTest.java</exclude>
+                    <exclude>NestedBuildersTest.java</exclude>
+                    <exclude>PackedFieldTest.java</exclude>
+                    <exclude>ParserTest.java</exclude>
+                    <exclude>ParseExceptionsTest.java</exclude>
+                    <exclude>Proto2ExtensionLookupSchemaTest.java</exclude>
+                    <exclude>Proto2SchemaTest.java</exclude>
+                    <exclude>Proto2UnknownEnumValueTest.java</exclude>
+                    <exclude>RepeatedFieldBuilderV3Test.java</exclude>
+                    <exclude>ServiceTest.java</exclude>
+                    <exclude>SingleFieldBuilderV3Test.java</exclude>
+                    <exclude>TestBadIdentifiers.java</exclude>
+                    <exclude>TextFormatParseInfoTreeTest.java</exclude>
+                    <exclude>TextFormatParseLocationTest.java</exclude>
+                    <exclude>TextFormatTest.java</exclude>
+                    <exclude>TestUtil.java</exclude>
+                    <exclude>UnknownEnumValueTest.java</exclude>
+                    <exclude>UnknownFieldSetLiteTest.java</exclude>
+                    <exclude>UnknownFieldSetTest.java</exclude>
+                    <exclude>WellKnownTypesTest.java</exclude>
+                    <exclude>WireFormatTest.java</exclude>
+                  </excludes>
+                </resource>
+              </resources>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+
+      <!-- Use Antrun plugin to generate sources with protoc -->
+      <plugin>
+        <artifactId>maven-antrun-plugin</artifactId>
+        <executions>
+          <!-- Generate core protos -->
+          <execution>
+            <id>generate-sources</id>
+            <phase>generate-sources</phase>
+            <configuration>
+              <target>
+                <ant antfile="generate-sources-build.xml"/>
+              </target>
+            </configuration>
+            <goals>
+              <goal>run</goal>
+            </goals>
+          </execution>
+
+          <!-- Generate the test protos -->
+          <execution>
+            <id>generate-test-sources</id>
+            <phase>generate-test-sources</phase>
+            <configuration>
+              <target>
+                <ant antfile="generate-test-sources-build.xml"/>
+              </target>
+            </configuration>
+            <goals>
+              <goal>run</goal>
+            </goals>
+          </execution>
+
+          <execution>
+            <id>process-lite-sources</id>
+            <phase>generate-test-sources</phase>
+            <configuration>
+              <target>
+                <ant antfile="process-lite-sources-build.xml"/>
+              </target>
+            </configuration>
+            <goals>
+              <goal>run</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>build-helper-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>add-generated-sources</id>
+            <phase>generate-sources</phase>
+            <goals>
+              <goal>add-source</goal>
+            </goals>
+            <configuration>
+              <sources>
+                <source>${generated.sources.dir}</source>
+              </sources>
+            </configuration>
+          </execution>
+
+          <execution>
+            <id>add-generated-test-sources</id>
+            <phase>generate-test-sources</phase>
+            <goals>
+              <goal>add-test-source</goal>
+            </goals>
+            <configuration>
+              <sources>
+                <source>${generated.testsources.dir}</source>
+              </sources>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+
+      <!-- OSGI bundle configuration -->
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-bundle-plugin</artifactId>
+        <extensions>true</extensions>
+        <configuration>
+          <instructions>
+            <Bundle-DocURL>https://developers.google.com/protocol-buffers/</Bundle-DocURL>
+            <Bundle-SymbolicName>com.google.protobuf</Bundle-SymbolicName>
+            <Export-Package>com.google.protobuf;version=${project.version}</Export-Package>
+            <Import-Package>sun.misc;resolution:=optional,*</Import-Package>
+          </instructions>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
diff --git a/java/lite/process-lite-sources-build.xml b/java/lite/process-lite-sources-build.xml
new file mode 100644
index 0000000..d49cf3a
--- /dev/null
+++ b/java/lite/process-lite-sources-build.xml
@@ -0,0 +1,7 @@
+<project name="process-lite-sources">
+    <exec executable="awk" output="${generated.testsources.dir}/com/google/protobuf/TestUtil.java">
+      <arg value="-f" />
+      <arg value="${basedir}/lite.awk" />
+      <arg value="${basedir}/../core/src/test/java/com/google/protobuf/TestUtil.java" />
+    </exec>
+</project>
diff --git a/java/pom.xml b/java/pom.xml
index 07e366f..5291f9c 100644
--- a/java/pom.xml
+++ b/java/pom.xml
@@ -223,6 +223,7 @@
 
   <modules>
     <module>bom</module>
+    <module>lite</module>
     <module>core</module>
     <module>util</module>
   </modules>
diff --git a/objectivec/google/protobuf/Timestamp.pbobjc.h b/objectivec/google/protobuf/Timestamp.pbobjc.h
index f6ea25c..591dbe3 100644
--- a/objectivec/google/protobuf/Timestamp.pbobjc.h
+++ b/objectivec/google/protobuf/Timestamp.pbobjc.h
@@ -129,11 +129,13 @@
  * 01:30 UTC on January 15, 2017.
  *
  * In JavaScript, one can convert a Date object to this format using the
- * standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)
+ * standard
+ * [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)
  * method. In Python, a standard `datetime.datetime` object can be converted
- * to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime)
- * with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one
- * can use the Joda Time's [`ISODateTimeFormat.dateTime()`](
+ * to this format using
+ * [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with
+ * the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use
+ * the Joda Time's [`ISODateTimeFormat.dateTime()`](
  * http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D
  * ) to obtain a formatter capable of generating timestamps in this format.
  **/