• Stars
    star
    318
  • Rank 131,872 (Top 3 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created over 12 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Artifactory REST Client Java API bindings

Artifactory Java Client

Scanned by Frogbot

Branch Status
master Build status
dev Build status

Artifactory Java client provides simple yet powerful Artifactory connection and management within your Java code.

The client allows managing Artifactory repositories, users, groups, permissions and system configuration. It also allows searches, upload and download artifacts to or from Artifactory and a lot more.

Table of Contents

Getting Started

Add artifactory-java-client-services as a dependency to your build script.

Maven

Add the following dependency to your pom.xml file:

<dependency>
    <groupId>org.jfrog.artifactory.client</groupId>
    <artifactId>artifactory-java-client-services</artifactId>
    <version>RELEASE</version>
</dependency>

Gradle

Add the following snippets to your build.gradle file:

repositories {
    mavenCentral()
}
dependencies {
    compile 'org.jfrog.artifactory.client:artifactory-java-client-services:+'
}

Examples:

This section includes a few usage examples of the Java client APIs from your application code.

Setting up Artifactory

Artifactory artifactory = ArtifactoryClientBuilder.create()
        .setUrl("ArtifactoryUrl")
        .setUsername("username")
        .setPassword("password")
        .build();

Trusting your own self-signed certificates without ignoring any SSL issue:

Artifactory artifactory = ArtifactoryClientBuilder.create()
        .setUrl("ArtifactoryUrl")
        .setUsername("username")
        .setPassword("password")
        .setSslContextBuilder(SSLContexts.custom()
                .loadTrustMaterial(< your trust strategy here >))
        .build();

Adding a request interceptor for logging or modifying outgoing requests:

Artifactory artifactory = ArtifactoryClientBuilder.create()
        .setUrl("ArtifactoryUrl")
        .setUsername("username")
        .setPassword("password")
        .addInterceptorLast((request, httpContext) -> {
            System.out.println("Artifactory request: " + request.getRequestLine());
        })
        .build();

Using HTTP proxy:

ProxyConfig proxy = new ProxyConfig();
proxy.setHost("localhost");
proxy.setPort(9090);
Artifactory artifactory = ArtifactoryClientBuilder.create()
        .setUrl("ArtifactoryUrl")
        .setUsername("username")
        .setPassword("password")
        .setProxy(proxy)
        .setNoProxyHosts(".gom.com,*.jfrog.com,.not.important.host:443")
        .build();

NOTE: If hosts to ignore proxy are not set through "setNoProxyHosts(String noProxyHosts)" method, they are set through NO_PROXY env variable.

Uploading and downloading artifacts

Uploading an Artifact
  • Using java.io.File as source:
    java.io.File file = new java.io.File("fileToUpload.txt");  
    File result = artifactory.repository("RepoName").upload("path/to/newName.txt", file).doUpload();
  • Using an InputStream as source:
    try (InputStream inputStream = Files.newInputStream(Paths.get("fileToUpload.txt"))) {
        File result = artifactory.repository("RepoName").upload("path/to/newName.txt", inputStream).doUpload();
    }
Upload and explode an Archive
java.io.File file = new java.io.File("fileToUpload.txt");
File result = artifactory.repository("RepoName").upload("path/to/newName.txt", file).doUploadAndExplode(true)
Uploading an Artifact with Properties
java.io.File file = new java.io.File("fileToUpload.txt");
File deployed = artifactory.repository("RepoName")
        .upload("path/to/newName.txt", file)
        .withProperty("color", "blue")
        .withProperty("color", "red")
        .doUpload();
Uploading and Artifact with an UploadListener

Can be used for tracking the progress of the current upload:

java.io.File file = new java.io.File("fileToUpload.txt");  
File result = artifactory.repository("RepoName")
        .upload("path/to/newName.txt", file)
        .withListener((bytesRead, totalBytes) -> {
            System.out.println("Uploaded " + format.format((double) bytesRead / totalBytes));
        })
        .doUpload();

The code snippet above would print the percentage of the current upload status.

Important: The totalBytes is calculated from the size of the input File. In case the source is a java.io.File object, the upload will use the File.length() to determine the total number of bytes. If the source is an InputStream, the total size of the upload must be specified using the withSize(long size) method. e.g.:

Path sourceFile = Paths.get("fileToUpload.txt");
try (InputStream inputStream = Files.newInputStream(sourceFile)) {
        File result = artifactory.repository("RepoName")
                .upload("path/to/newName.txt", inputStream)
                .withSize(Files.size(sourceFile))
                .withListener((bytesRead, totalBytes) -> {
                    System.out.println("Uploaded " + format.format((double) bytesRead / totalBytes));
                })
                .doUpload();
    }
Copy an Artifact by SHA-1
java.io.File file = new java.io.File("fileToUpload.txt");
String sha1 = calcSha1(file)

File deployed = artifactory.repository("RepoName")
        .copyBySha1("path/to/newName.txt", sha1)
        .doUpload();
Downloading an Artifact
InputStream iStream = artifactory.repository("RepoName")
        .download("path/to/fileToDownload.txt")
        .doDownload();
Downloading an Artifact with non-mandatory Properties
InputStream iStream = artifactory.repository("RepoName")
        .download("path/to/fileToDownload.txt")
        .withProperty("colors", "red")
        .doDownload();
Downloading Artifact with mandatory properties
InputStream iStream = artifactory.repository("RepoName")
        .download("path/to/fileToDownload.txt")
        .withMandatoryProperty("colors", "red")
        .doDownload();
Downloading Artifact with custom headers
Map<String, String> headers = new HashMap<>();
headers.put("Range", "bytes=0-10");
InputStream iStream = artifactory.repository("RepoName")
        .download("path/to/fileToDownload.txt")
        .doDownloadWithHeaders(headers);

File, Folder and Repository Info

File Info
File file = artifactory.repository("RepoName").file("path/to/file.txt").info();
boolean isFile = file.isFolder();
long fileSize = file.getSize();
String fileUri = file.getDownloadUri();
String md5Checksum = file.getChecksums().getMd5();
String sha1Checksum = file.getChecksums().getSha1();
String sha2Checksum = file.getChecksums().getSha256();
Folder Info
Folder folder = artifactory.repository("RepoName").folder("path/to/folder").info();
boolean isFolder = folder.isFolder();
String repoName = folder.getRepo();
String folderPath = folder.getPath();
int childrenItemsSize = folder.getChildren().size();
Repository Info
Repository repo = artifactory.repository("RepoName").get();
String repoKey = repo.getKey();
String desc = repo.getDescription();
String layout = repo.getRepoLayoutRef();
RepositoryType repoClass = repo.getRclass();

RepositorySettings settings = repo.getRepositorySettings();
PackageType packageType = settings.getPackageType();

if (PackageType.bower == packageType) {
    BowerRepositorySettings settingsForBower = (BowerRepositorySettings) settings;
    String bowerRegistryUrl = settingsForBower.getBowerRegistryUrl();
}
Storage Summary Info
BinariesSummary binariesSummary = artifactory.storage().getStorageInfo().getBinariesSummary();
FileStorageSummary fileStorageSummary = artifactory.storage().getStorageInfo().getFileStoreSummary();

for (RepositorySummary repoSummary : artifactory.storage().getStorageInfo().getRepositoriesSummaryList()) {
    repoSummary.getRepoKey();
}

Search

Available Searches
Searches repositories(String... repositories);

Searches artifactsByName(String name);

Searches artifactsCreatedSince(long sinceMillis);

Searches artifactsCreatedInDateRange(long fromMillis, long toMillis);

Searches artifactsByGavc();

Searches artifactsLatestVersion();

List<AqlItem> artifactsByFileSpec(FileSpec fileSpec);
Searching Files in Repositories
List<RepoPath> searchItems = artifactory.searches()
        .repositories("RepoName", "RepoName2")
        .artifactsByName("prefixedWith*.txt")
        .doSearch();

for (RepoPath searchItem : searchItems) {
    String repoKey = searchItem.getRepoKey();
    String itemPath = searchItem.getItemPath();
}
Searching Files by Properties
List<RepoPath> searchItems = artifactory.searches()
        .repositories("RepoName", "RepoName2")
        .itemsByProperty()
        .property("released")
        .property("colors", "r*?")
        .doSearch();

for (RepoPath searchItem : searchItems) {
    String repoKey = searchItem.getRepoKey();
    String itemPath = searchItem.getItemPath();
}
Searching Files by GAVC
List<RepoPath> results = artifactory.searches().artifactsByGavc()
        .groupId("com.example")
        .artifactId("com.example.test")
        .version("1.0.0")
        .classifier("zip")
        .doSearch();

for (RepoPath searchItem : searchItems) {
    String repoKey = searchItem.getRepoKey();
    String itemPath = searchItem.getItemPath();
}
Searching Files by GAVC and Repository
List<RepoPath> results = artifactory.searches().artifactsByGavc()
        .groupId("com.example")
        .artifactId("com.example.test")
        .repositories("liba-release-local")
        .doSearch();

for (RepoPath searchItem : searchItems) {
    String repoKey = searchItem.getRepoKey();
    String itemPath = searchItem.getItemPath();
}
Searching Latest Version by GAVC and Repository
String latestVersion = artifactory.searches().artifactsLatestVersion()
        .groupId("com.example")
        .artifactId("com.example.test")
        .repositories("liba-release-local")
        .doRawSearch();
Searching Files Using File Specs
FileSpec fileSpec = FileSpec.fromString("{\"files\": [{\"pattern\": \"liba-release-local/*test*\"}]}");
List<AqlItem> results = artifactory.searches().artifactsByFileSpec(fileSpec);

Builds

Get All Builds
AllBuilds allBuilds = artifactory.builds().getAllBuilds();
Get Build Runs
BuildRuns buildRuns = artifactory.builds().getBuildRuns("BuildName");

Managing Items (files and folders)

Getting Items
ItemHandle fileItem = artifactory.repository("RepoName").file("path/to/file.txt");
ItemHandle folderItem = artifactory.repository("RepoName").folder("path/to/folder");
Copying Items
ItemHandle item =
...
ItemHandle newItem = item.copy("ToRepoName", "path/to/item");
Moving Items
ItemHandle item =
...
ItemHandle newItem = item.move("ToRepoName", "path/to/item");
Deleting Items
String result = artifactory.repository("RepoName").delete("path/to/item");

Managing Repositories

List all Repositories
import static org.jfrog.artifactory.client.model.impl.RepositoryTypeImpl.LOCAL;
import static org.jfrog.artifactory.client.model.impl.RepositoryTypeImpl.REMOTE;
import static org.jfrog.artifactory.client.model.impl.RepositoryTypeImpl.VIRTUAL;
import static org.jfrog.artifactory.client.model.impl.RepositoryTypeImpl.FEDERATED;

...
List<LightweightRepository> localRepoList = artifactory.repositories().list(LOCAL);
List<LightweightRepository> remoteRepoList = artifactory.repositories().list(REMOTE);
List<LightweightRepository> virtualRepoList = artifactory.repositories().list(VIRTUAL);
List<LightweightRepository> federatedRepoList = artifactory.repositories().list(FEDERATED);
Creating Repositories
DebianRepositorySettingsImpl settings = new DebianRepositorySettingsImpl();
settings.setDebianTrivialLayout(true);

Repository repository = artifactory.repositories()
        .builders()
        .localRepositoryBuilder()
        .key("NewRepoName")
        .description("new local repository")
        .repositorySettings(settings)
        .build();

String result = artifactory.repositories().create(2, repository);
Creating Federated Repositories
DockerRepositorySettings settings = new DockerRepositorySettingsImpl();
List<FederatedMember> federatedMembers = new ArrayList<FederatedMember>();
FederatedMember federatedMember =  new FederatedMember("http://<JPDURL>/artifactory/"+NewRepoName, true);
federatedMembers.add(federatedMember);
Repository repository = artifactory.repositories()
        .builders()
        .federatedRepositoryBuilder()
        .members(federatedMembers)
        .key("NewRepoName")
        .description("new federated repository")
        .repositorySettings(settings)
        .build();

String result = artifactory.repositories().create(2, repository);
Repository Settings

For choosing your repository characteristic, use the right settings, each one of them possess the relevant attributes available in Artifactory.

Example for using generic repository with maven layout:

RepositorySettings settings = new GenericRepositorySettingsImpl()
settings.setRepoLayout("maven-2-default")
Updating Repositories
Repository repository = artifactory.repository("RepoName").get();
RepositorySettings settings = repository.getRepositorySettings();

if (PackageType.debian == settings.getPackageType()) {
    DebianRepositorySettingsImpl settingsForDebian = (DebianRepositorySettingsImpl) settings;
    settingsForDebian.setDebianTrivialLayout(false);
}

Repository updatedRepository = artifactory.repositories()
        .builders()
        .builderFrom(repository)
        .description("new_description")
        .build();

String result = artifactory.repositories().update(updatedRepository);
Deleting Repositories
String result = artifactory.repository("RepoName").delete();
Deleting all Repository Replications
// Method supported for local and remote repositories
artifactory.repository("RepoName").replications.delete()
Creating or replacing a replication on a local repository
LocalReplication replication = new LocalReplicationBuilderImpl()
        .url("http://hostname1:port/artifactory/RepoName")
        .socketTimeoutMillis(30000)
        .username("john.doe")
        .password("secret")
        .enableEventReplication(false)
        .enabled(false)
        .cronExp("0 0 0/2 * * ?")
        .syncDeletes(true)
        .syncProperties(true)
        .syncStatistics(true)
        .pathPrefix("")
        .repoKey("RepoName")
        .build();

artifactory.repository("RepoName").getReplications().createOrReplace(replication);
Creating or replacing a replication on a remote repository
RemoteReplication replication = new RemoteReplicationBuilderImpl()
        .enabled(false)
        .cronExp("0 0 0/2 * * ?")
        .syncDeletes(true)
        .syncProperties(true)
        .repoKey("RepoName")
        .build();

artifactory.repository("RepoName").getReplications().createOrReplace(replication)
Managing Xray properties
Repository repository = artifactory.repository("RepoName").get();

XraySettings xraySettings = repository.getXraySettings();
xraySettings.setXrayIndex(true)

Repository updatedRepository = artifactory.repositories()
        .builders()
        .builderFrom(repository)
        .description("new_description")
        .build();

String result = artifactory.repositories().update(updatedRepository);
Custom Package Type and Properties
CustomPackageTypeImpl customPackageType = new CustomPackageTypeImpl("name");
CustomRepositorySettingsImpl settings = new CustomRepositorySettingsImpl(customPackageType);

Map<String, Object> customProperties = new HashMap<>();
customProperties.put("key", "value");

Repository repository = artifactory.repositories()
        .builders()
        .localRepositoryBuilder()
        .key("NewRepoName")
        .description("new local repository")
        .repositorySettings(settings)
        .customProperties(customProperties)
        .build();

String result = artifactory.repositories().create(2, repository);
Smart Remote Repositories

A smart remote repository is a remote repository that proxies a repository from another instance of Artifactory. Smart remote repositories are configured with four additional properties.

RemoteRepository remoteRepository = (RemoteRepository) artifactory.repository("SmartRemoteRepoName").get();
ContentSync contentSync = remoteRepository.getContentSync();
contentSync.setEnabled(true);
// Report Statistics
contentSync.getStatistics().setEnabled(true);
// Sync Properties
contentSync.getProperties().setEnabled(true);
// Source Absence Detection
contentSync.getSource().setOriginAbsenceDetection(true);

Repository updatedRepository = artifactory.repositories()
        .builders()
        .builderFrom(remoteRepository)
        .listRemoteFolderItems(true)    // List Remote Folder Items
        .build();

String result = artifactory.repositories().update(updatedRepository);

Managing Users

Geting User Information
User user = artifactory.security().user("userName");
String name = user.getName();
String email = user.getEmail();
Collection<String> groups = user.getGroups();
Date loggedIn = user.getLastLoggedIn();
boolean profileUpdatable = user.isProfileUpdatable();
boolean isAdmin = user.isAdmin();
boolean internalPass = user.isInternalPasswordDisabled();
String realm = user.getRealm();
List all User Names
Collection<String> userNames = artifactory.security().userNames();
for (String userName : userNames) {
    User user = artifactory.security().user(userName);
}
Creating or Updating Users
UserBuilder userBuilder = artifactory.security().builders().userBuilder();
User user = userBuilder.name("userName")
        .email("[email protected]")
        .admin(false)
        .profileUpdatable(true)
        .password("password")
        .build();

artifactory.security().createOrUpdate(user);
Deleting Users
String result = artifactory.security().deleteUser("userName");

Managing User Groups

Get User Group Information
Group group = artifactory.security().group("groupName");
String description = group.getDescription();
boolean isAutoJoin = group.isAutoJoin();
boolean isAdminPrivileges = group.isAdminPrivileges();
List all User Groups
List<String> groupNames = artifactory.security().groupNames();
for (String groupName : groupNames) {
    Group group = artifactory.security().group(groupName);
}
Creating or Updating User Groups
Group group = artifactory.security().builders().groupBuilder()
        .name("groupName")
        .autoJoin(true)
        .adminPrivileges(true)
        .description("new group")
        .build();

artifactory.security().createOrUpdateGroup(group);
Creating or Updating User External Groups

When using LDAP integration or realm User plugin, it could be interesting to preload groups (and permissions) before any user login :

String realmAttributes = "ldapGroupName=groupName;groupsStrategy=STATIC;groupDn=cn=GROUPNAME,ou=foo,o=bar";
Group group = artifactory.security().builders().groupBuilder()
        .name("groupName")
        .description("GROUPNAME")
        .realm("ldap")
        .realmAttributes(realmAttributes)
        .build();
artifactory.security().createOrUpdateGroup(group);

NB: The realmAttributes depends of realm implementation ; so firstly, use LDAP Groups Synchronization to import some groups manually in Artifactory, and analyse a JSON GET on one of this/these group(s) to understand the content of realmAttributes parameter.

Deleting User Groups
artifactory.security().deleteGroup("groupName");

Permissions

Getting Item Permissions
Set<ItemPermission> itemPermissions = artifactory.repository("RepoName")
        .file("path/to/file.txt")
        .effectivePermissions();

for (ItemPermission itemPermission : itemPermissions) {
    RepoPath repoPath = itemPermissions.getRepoPath();
    List<Privilege> privileges = getPrivileges();
    Subject subject = getSubject();
    boolean isAllowedTo = isAllowedTo(ADMIN, DELETE, DEPLOY, ANNOTATE, READ);
}
Getting Permission Target information
PermissionTarget permissionTarget = artifactory.security().permissionTarget("permissionName");
String name = permissionTarget.getName()
);
String exclude = permissionTarget.getExcludesPattern();
String include = permissionTarget.getIncludesPattern();
List<String> repos = permissionTarget.getRepositories();
List<ItemPermission> perm = permissionTarget.getItemPermissions();
Listing all Permission Targets
List<String> permissionTargetNames = artifactory.security().permissionTargets();
for (String permissionTargetName : permissionTargetNames) {
    PermissionTarget permissionTarget = artifactory.security().permissionTarget(permissionTargetName);
}
Creating a Permission Target
Principal userAdmin = artifactory.security().builders().principalBuilder()
        .name("admin")
        .privileges(Privilege.ADMIN)
        .build();

Principal groupTest = artifactory.security().builders().principalBuilder()
        .name("myTest")
        .privileges(Privilege.DEPLOY, Privilege.READ)
        .build();

Principals principals = artifactory.security().builders().principalsBuilder()
        .users(userAdmin)
        .groups(groupTest)
        .build();

PermissionTarget permissionTarget = artifactory.security().builders().permissionTargetBuilder()
        .name("myPermission")
        .principals(principals)
        .repositories("some-repository")
        .includesPattern("com/company/**,org/public/**")
        .build();

artifactory.security().createOrReplacePermissionTarget(permissionTarget);

System

Artifactory version
Version version = artifactory.system().version();
String version = version.getVersion();
String revision = version.getRevision();
String license = version.getLicense();
List<String> addons = version.getAddons();
Getting System Configuration XML
String xml = artifactory.system().configuration();
Setting System Configuration XML
artifactory.system().configuration(xml);
Getting System Configuration YAML
String yaml = artifactory.system().yamlConfiguration();
Setting System Configuration YAML
artifactory.system().yamlConfiguration(yaml);

Rest API

Executing an Artifactory REST API

ArtifactoryRequest repositoryRequest = new ArtifactoryRequestImpl().apiUrl("api/repositories")
        .method(ArtifactoryRequest.Method.GET)
        .responseType(ArtifactoryRequest.ContentType.JSON);
ArtifactoryResponse response = artifactory.restCall(repositoryRequest);

// Get the response headers
org.apache.http.Header[] headers = response.getAllHeaders();

// Get the response status information
org.apache.http.StatusLine statusLine = response.getStatusLine();

// A convenience method for verifying success
assert response.isSuccessResponse()

// Get the response raw body
String rawBody = response.rawBody();

// If the the response raw body has a JSON format, populate an object with the body content, 
// by providing a object's class. 
List<Map<String, String>> parsedBody = response.parseBody(List.class);

Building and Testing the Sources

The code is built using Gradle and includes integration tests.

Since the tests may use features which have been recently added to Artifactory, such as new package types, it is best to run the tests against the latest release of Artifactory. Some tests may therefore fail otherwise. Those tests can be manually commented out in that case.

If you'd like to build the code without tests, run:

gradle clean build -x test

Please follow these steps to build and test the code:

  • Startup an Artifactory-Pro instance.
  • Set the CLIENTTESTS_ARTIFACTORY_URL, CLIENTTESTS_ARTIFACTORY_USERNAME and CLIENTTESTS_ARTIFACTORY_PASSWORD environment variables with your Artifactory URL, username and password.
  • Run:
gradle clean test

Example Projects

We created sample projects demonstrating how to use the Artifactory Java Client.

Contributing Code

We welcome community contribution through pull requests.

Guidelines

  • If the existing tests do not already cover your changes, please add tests..
  • Pull requests should be created on the dev branch.

License

This client is available under the Apache License, Version 2.0.

Release Notes

The release notes are available here.

More Repositories

1

project-examples

Small projects in universal build ecosystems to configure CI and Artifactory
C#
974
star
2

jfrog-cli

JFrog CLI is a client that provides a simple interface that automates access to the JFrog products.
Go
532
star
3

artifactory-user-plugins

Sample Artifactory User Plugins
Groovy
356
star
4

artifactory-docker-examples

Examples for using Artifactory Docker distribution in various environments
Shell
330
star
5

frogbot

🐸 Scans your Git repository with JFrog Xray for security vulnerabilities. 🤖
Go
299
star
6

terraform-provider-artifactory

Terraform provider to manage JFrog Artifactory
Go
275
star
7

charts

JFrog official Helm Charts
Shell
255
star
8

setup-jfrog-cli

Set up JFrog CLI in your GitHub Actions workflow
TypeScript
245
star
9

jfrog-client-go

All go clients for JFrog products
Go
211
star
10

log4j-tools

Java
168
star
11

gocenter

The Github README for JFrog Go-center. Use this for reporting issues
164
star
12

jfrog-idea-plugin

JFrog IntelliJ IDEA plugin
Java
153
star
13

jfrog-vscode-extension

JFrog VS-Code Extension
TypeScript
151
star
14

terraform-provider-xray

Terraform provider to manage JFrog Xray
Go
149
star
15

terraform-provider-project

Terraform provider to manage JFrog Projects
Go
148
star
16

build-info

Artifactory's open integration layer for CI build servers
Java
146
star
17

artifactory-scripts

Scripts for Artifactory (Usually, for REST API), community driven.
Groovy
143
star
18

text4shell-tools

Python
104
star
19

jfrog-spring-tools

Python
80
star
20

JFrog-Cloud-Installers

Template to deploy Artifactory Enterprise cluster.
CSS
78
star
21

jfrog-docker-desktop-extension

🐸 Scans any of your local Docker images for security vulnerabilities. 🐋
TypeScript
74
star
22

nexus2artifactory

NexusToArtifactory - A tool designed to ease migration from Sonatype Nexus to JFrog Artifactory.
Python
67
star
23

nimbuspwn-tools

Shell
64
star
24

build-info-go

build-info-go is a Go library and a CLI, which allows generating build-info for a source code project.
Go
63
star
25

jfrog-npm-tools

Python
54
star
26

cocoapods-art

CocoaPods Plugin to work against Artifactory Repository
Ruby
53
star
27

jfrog-cli-plugins-reg

Go
52
star
28

kubenab

Kubernetes Admission Webhook to enforce pulling of Docker images from the private registry.
Go
46
star
29

froggit-go

Froggit-Go is a universal Go library, allowing to perform actions on VCS providers.
Go
45
star
30

jfrog-CVE-2023-25136-OpenSSH_Double-Free

Python
43
star
31

vault-plugin-secrets-artifactory

HashiCorp Vault Secrets Plugin for Artifactory
Go
42
star
32

teamcity-artifactory-plugin

TeamCity plugin that enables traceable build artifacts with Artifactory
Java
42
star
33

jfrog-azure-devops-extension

JavaScript
41
star
34

chartcenter

The Central Helm Repository for the Community
Dockerfile
41
star
35

bamboo-artifactory-plugin

Atlassian Bamboo plugin that enables traceable build artifacts with Artifactory
Java
40
star
36

jfrog-docker-repo-simple-example

Getting started with JFrog Docker Repos - Example
Dockerfile
39
star
37

jfrog-CVE-2022-21449

Python
38
star
38

cve-2024-3094-tools

Shell
37
star
39

artifactory-cli-go

Artifactory CLI written in Golang
Go
33
star
40

jfrog-cli-core

Go
32
star
41

gitlab-templates

Templates for CI/CD in GitLab using JFrog CLI
30
star
42

docker2artifactory

Python
29
star
43

mlflow-jfrog-plugin

Python
28
star
44

log-analytics-prometheus

JFrog Prometheus Log Analytics Integration
27
star
45

artifactory-docker-builder

Groovy
27
star
46

auto-mat

A docker container to generate heap dump reports and indexes for eclipse MAT
Java
26
star
47

kubexray

JFrog KubeXray scanner on Kubernetes
Go
25
star
48

artifactory-maven-plugin

A Maven plugin to resolve artifacts from Artifactory, deploy artifacts to Artifactory, capture and publish build info.
Java
23
star
49

jfrog-registry-operator

Enhancing AWS Security: JFrog's Seamless Integration and the Power of AssumeRole
Go
22
star
50

artifactory-gradle-plugin

JFrog Gradle plugin for Build Info extraction and Artifactory publishing.
Java
21
star
51

log-analytics

JFrog Log Analytics
Shell
19
star
52

polkit-tools

Shell
18
star
53

jfrog-cli-plugins

Go
17
star
54

gofrog

A collection of go utilities
Go
16
star
55

bower-art-resolver

JavaScript
15
star
56

jfrog-openssl-tools

Python
15
star
57

DevRel

Java
12
star
58

artifactory-sbt-plugin

The SBT Plugin for Artifactory resolve and pulish
Scala
12
star
59

artifactory-user-plugins-devenv

Development Environment for writting Artifactory User Plugins
Shell
12
star
60

aws-codestar

Artifactory-Code Star integration
Shell
12
star
61

gradle-dep-tree

Gradle plugin that reads the Gradle dependencies of a given Gradle project, and generates a dependency tree.
Java
12
star
62

SwampUp2022

Shell
12
star
63

jfrog-client-js

Xray Javascript Client
TypeScript
11
star
64

maven-anno-mojo

Write Maven plugins using annotations
Java
11
star
65

jfrog-ecosystem-integration-env

A Docker image containing all the tools JFrog CLI integrates with and supports.
Dockerfile
11
star
66

bamboo-jfrog-plugin

Easy integration between Bamboo and the JFrog Platform.
Java
10
star
67

xray-client-java

Xray Java Client
Java
9
star
68

artifactory-bosh-release

Bosh release of Artifactory for the PCF
HTML
9
star
69

msbuild-artifactory-plugin

Artifactory integration with MSBuild
C#
8
star
70

documentation

Go
8
star
71

log-analytics-splunk

JFrog Splunk Log Analytics Integration
JavaScript
8
star
72

docker-compose-demos

JFrog example demos using docker compose
Shell
8
star
73

jfrog-visual-studio-extension

C#
8
star
74

log-analytics-elastic

JFrog Elastic Fluentd Kibana Log Analytics Integration
8
star
75

jfrog-ui-essentials

JavaScript
8
star
76

jfrog-ide-webview

JFrog-IDE-Webview is a React-based HTML page designed to be seamlessly embedded within JFrog VS Code Extension and the JFrog IDEA Plugin.
TypeScript
8
star
77

go-mockhttp

Go
7
star
78

ide-plugins-common

Common code used by the JFrog Idea Plugin and the JFrog Eclipse plugin
Java
7
star
79

jfrog-pipelines-task

7
star
80

nuget-deps-tree

This npm package reads the NuGet dependencies of a .NET project, and generates a dependencies tree object.
TypeScript
7
star
81

log-analytics-datadog

JFrog Datadog Log Analytics Integration
Dockerfile
7
star
82

knife-art

Knife Artifactory integration
Ruby
7
star
83

jfrog-pipelines-go-task

Makefile
7
star
84

jfrog-mission-control-2.0

Jfrog Mission Control 2.0 example scripts
Groovy
7
star
85

jfrog-cli-plugin-template

Go
6
star
86

npm_domain_check

Python
6
star
87

go-license-discovery

A go library for matching text against known OSS licenses
Go
6
star
88

sample-soleng-python-project

Python
6
star
89

jfrog-distroless

Starlark
6
star
90

maven-dep-tree

Maven plugin that reads the Maven dependencies of a given Maven project, and generates a dependency tree.
Java
6
star
91

terraform-provider-pipeline

Terraform provider to manage Artifactory Pipelines
Go
6
star
92

docker-remote-util

A groovy util library to interact with docker remote api
Groovy
6
star
93

webapp-examples

Examples of Web Application that use Artifactory as a backend
CSS
6
star
94

jfrog-pipelines-jenkins-example

Go
5
star
95

jfrog-cli-security

Go module that encompasses the security commands of JFrog CLI
Go
5
star
96

fan4idea

Java
4
star
97

live-logs

Go
4
star
98

gocmd

Go
4
star
99

jfrog-pipelines-docker-sample

Shell
4
star
100

SwampUp2023

HCL
4
star