Search code examples
sqlgroovynexusnexus3

How to list all assets (groupId, name, size) in a Nexus3 repository?


I know it is very simple to do in OrientDB :

select * from asset where bucket.repository_name = 'my-repo-release';

but I need to get this list remotely, not in local orientdb console, so I need a groovy script and I can't find it anywhere.


Solution

  • Here is the example script : https://github.com/sonatype-nexus-community/nexus-scripting-examples

    it can be found in the "nexus-script-example" project :

    import org.sonatype.nexus.repository.storage.Asset
    import org.sonatype.nexus.repository.storage.Query
    import org.sonatype.nexus.repository.storage.StorageFacet
    
    import groovy.json.JsonOutput
    import groovy.json.JsonSlurper
    
    def assetListFile = new File('/tmp/assetListFile.txt')
    def request = new JsonSlurper().parseText("{\"repoName\":\"maven-releases\",\"startDate\":\"2016-01-01\"}")
    
    assert request.repoName: 'repoName parameter is required'
    assert request.startDate: 'startDate parameter is required, format: yyyy-mm-dd'
    
    log.info("Gathering Asset list for repository: ${request.repoName} as of startDate: ${request.startDate}")
    
    def repo = repository.repositoryManager.get(request.repoName)
    StorageFacet storageFacet = repo.facet(StorageFacet)
    def tx = storageFacet.txSupplier().get()
    
    try {
        tx.begin()
        Iterable<Asset> assets = tx.findAssets(Query.builder().where('last_updated > ').param(request.startDate).build(), [repo])
    
        assets.each {Asset asset ->
            assetListFile << asset.name() + '\n'
        }
    }
    finally {
        tx.close()
    }
    

    All properties of an asset (object org.sonatype.nexus.repository.storage.Asset) are accessible, including asset.size().