Update archive script

  - Include all licenses for internalized libs in r8lib maven artefact
  - Add option to set destination directory for dry run

Bug: 136241862
Change-Id: I0ab7d99d404559411595e3e0ec6944ebf76efd17
diff --git a/tools/create_maven_release.py b/tools/create_maven_release.py
index 72098a3..aa4c3f8 100755
--- a/tools/create_maven_release.py
+++ b/tools/create_maven_release.py
@@ -23,6 +23,14 @@
         <version>$version</version>
     </dependency>""")
 
+LICENSETEMPLATE = Template(
+"""
+    <license>
+      <name>$name</name>
+      <url>$url</url>
+      <distribution>repo</distribution>
+    </license>""")
+
 POMTEMPLATE = Template(
 """<project
     xmlns="http://maven.apache.org/POM/4.0.0"
@@ -43,7 +51,7 @@
       <name>BSD-3-Clause</name>
       <url>https://opensource.org/licenses/BSD-3-Clause</url>
       <distribution>repo</distribution>
-    </license>
+    </license>$library_licenses
   </licenses>
   <dependencies>$dependencies
   </dependencies>
@@ -82,25 +90,35 @@
   raise Exception('Unable to determine version.')
 
 def generate_library_licenses():
+  artifact_prefix = '- artifact: '
   license_prefix = 'license: '
   licenses = []
   license_url_prefix = 'licenseUrl: '
   license_urls = []
   with open('LIBRARY-LICENSE', 'r') as file:
+    name = None
+    url = None
     for line in file:
       trimmed = line.strip()
+      # Collect license name and url for each artifact. They must come in
+      # pairs for each artifact.
+      if trimmed.startswith(artifact_prefix):
+        assert not name
+        assert not url
       if trimmed.startswith(license_prefix):
-        # Assert checking that licenses come in name/url pairs.
-        assert len(licenses) == len(license_urls)
         name = trimmed[len(license_prefix):]
-        if not name in licenses:
-          licenses.append(name)
       if trimmed.startswith(license_url_prefix):
         url = trimmed[len(license_url_prefix):]
-        if not url in license_urls:
+      # Licenses come in name/url pairs. When both are present add pair
+      # to collected licenses if either name or url has not been recorded yet,
+      # as some licenses with slightly different names point to the same url.
+      if name and url:
+        if (not name in licenses) or (not url in license_urls):
+          licenses.append(name)
           license_urls.append(url)
-        # Assert checking that licenses come in name/url pairs.
-        assert len(licenses) == len(license_urls)
+        name = None
+        url = None
+      assert len(licenses) == len(license_urls)
   result = ''
   for i in range(len(licenses)):
     name = licenses[i]
@@ -176,8 +194,9 @@
 
 def write_pom_file(version, pom_file, exclude_dependencies):
   dependencies = "" if exclude_dependencies else generate_dependencies()
+  library_licenses = generate_library_licenses() if exclude_dependencies else ""
   version_pom = POMTEMPLATE.substitute(
-      version=version, dependencies=dependencies)
+      version=version, dependencies=dependencies, library_licenses=library_licenses)
   with open(pom_file, 'w') as file:
     file.write(version_pom)