Maven Support
Buck supports Java and downloads from Maven.
remote_file(
name = 'httpmime-jar',
sha1 = '54ffde537682aea984c22fbcf0106f21397c5f9b',
url = 'mvn:org.apache.httpcomponents:httpmime:jar:4.3.4',
out = 'httpmime.jar',
)
To implement Maven support, Buckaroo would need:
- to be able to parse maven uri's
- find and parse
pom.xmlmanifest from maven - fetch transitive dependencies
- generate an appropriate buck file on install
Some more info: A maven repository has a predictable file-structure: http://central.maven.org/maven2/
A maven coordonate eg. com.google.guava:guava maps to
http://central.maven.org/maven2/com/google/guava/guava
This folder contains several important files:
A listing of all available versions:
http://central.maven.org/maven2/com/google/guava/guava/maven-metadata.xml
<metadata modelVersion="1.1.0">
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<versioning>
<latest>27.1-jre</latest>
<release>27.1-jre</release>
<versions>
<version>r03</version>
<version>22.0-rc1-android</version>
<version>18.0-android</version>
<version>18.0-jre</version>
...
And foreach version eg. http://central.maven.org/maven2/com/google/guava/guava/22.0-rc1-android
the artefact:
http://central.maven.org/maven2/com/google/guava/guava/22.0-rc1-android/guava-22.0-rc1-android.jar
And the Manifest:
http://central.maven.org/maven2/com/google/guava/guava/22.0-rc1-android/guava-22.0-rc1-android.pom
Which includes a list of dependencies:
<dependencies>
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
</dependency>
<dependency>
<groupId>com.google.errorprone</groupId>
<artifactId>error_prone_annotations</artifactId>
</dependency>
<dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>animal-sniffer-annotations</artifactId>
<version>${animal.sniffer.version}</version>
</dependency>
Some of the entries may refer to properties:
<properties>
<aaa.bbb.ccc>1.7</aaa.bbb.ccc>
</properties>
Every file also has a corresponding .sha1:
http://central.maven.org/maven2/com/google/guava/guava/22.0-rc1-android/guava-22.0-rc1-android.jar.sha1
- How to wire up Maven with the Resolver:
- Define a Maven PackageIdentifer & Location
- https://github.com/LoopPerfect/buckaroo/blob/master/buckaroo/PackageIdentifier.fs#L7
- https://github.com/LoopPerfect/buckaroo/blob/master/buckaroo/PackageLocation.fs#L24
- Create a Maven Coordiate Parser
- https://github.com/LoopPerfect/buckaroo/blob/master/buckaroo/PackageIdentifier.fs#L91
- Create a POM to Manifest translator
- implement a function that maps maven-location to pom url
- switch on location type fetch and translate file here: https://github.com/LoopPerfect/buckaroo/blob/master/buckaroo/DefaultSourceExplorer.fs#L295
- How to wire things up with Buck:
- download artefact into cache folder
- copy artefact from cache folder to
buckaroo/central/maven/org/maven2/com/google/guava/guava/22.0-rc1-android/
generate a BUCK file:
load('//buckaroo_macros.bzl', 'buckaroo_deps')
prebuilt_jar(
name = 'guava-22.0-rc1-android-prebuilt',
binary_jar = 'guava-22.0-rc1-android.jar',
source_jar = 'guava-22.0-rc1-android.sources.jar', # optional
javadoc_url = 'http://kentbeck.github.com/junit/javadoc/4.8/', # optional
)
java_library(
name = 'guava-22.0-rc1-android',
visibility = ['PUBLIC'],
deps = buckaroo_deps()
)
https://buckbuild.com/rule/prebuilt_jar.html