Overview
Distribute JNexus through standard package managers for easier installation and automatic updates.
Current State
- ✅ packagecloud.io (Debian/RPM packages)
- ✅ GitHub Releases (manual download)
- ❌ Not in Maven Central
- ❌ Not in Homebrew
- ❌ Not in Google Play Store
- ❌ Not in App Store
- ❌ Not in F-Droid
CI/CD Score Impact
Current: CI/CD A- (90/100)
With #73 + this: CI/CD A+ (98/100)
Platform Distribution Matrix
| Platform |
Package Manager |
Priority |
Effort |
Status |
| macOS |
Homebrew Tap |
High |
Low |
❌ |
| macOS |
App Store |
Medium |
High |
❌ |
| Linux |
Snap |
Medium |
Medium |
❌ |
| Linux |
Flatpak |
Low |
Medium |
❌ |
| Windows |
Chocolatey |
Low |
Medium |
❌ |
| Windows |
Winget |
Low |
Low |
❌ |
| Java |
Maven Central |
High |
Medium |
❌ |
| Android |
Google Play |
High |
High |
❌ |
| Android |
F-Droid |
Medium |
Medium |
❌ |
| iOS |
App Store |
High |
High |
❌ |
1. Homebrew Tap (macOS + Linux)
Setup
Create flossware/homebrew-tap repository:
Formula:
class Jnexus < Formula
desc "Sonatype Nexus repository management tool"
homepage "https://github.com/FlossWare/jnexus"
url "https://github.com/FlossWare/jnexus/releases/download/v2.0.0/jnexus-2.0-jar-with-dependencies.jar"
sha256 "SHA256_HERE"
license "GPL-3.0"
depends_on "openjdk@21"
def install
libexec.install "jnexus-2.0-jar-with-dependencies.jar"
bin.write_jar_script libexec/"jnexus-2.0-jar-with-dependencies.jar", "jnexus"
end
test do
assert_match "JNexus", shell_output("#{bin}/jnexus --version")
end
end
Installation:
brew tap flossware/tap
brew install jnexus
# Or one-liner:
brew install flossware/tap/jnexus
Update workflow (.github/workflows/homebrew.yml):
- name: Update Homebrew Tap
if: startsWith(github.ref, 'refs/tags/v')
run: |
# Calculate SHA256
SHA256=$(sha256sum target/jnexus-*-jar-with-dependencies.jar | cut -d' ' -f1)
# Clone tap repo
git clone https://github.com/FlossWare/homebrew-tap
cd homebrew-tap
# Update formula
sed -i "s|url \".*\"|url \"https://github.com/FlossWare/jnexus/releases/download/${GITHUB_REF#refs/tags/}/jnexus-${VERSION}-jar-with-dependencies.jar\"|" Formula/jnexus.rb
sed -i "s|sha256 \".*\"|sha256 \"${SHA256}\"|" Formula/jnexus.rb
# Commit and push
git add Formula/jnexus.rb
git commit -m "Update jnexus to ${VERSION}"
git push
2. Maven Central (Java Libraries)
Setup
Why: jnexus-core can be consumed as a library by other Java projects.
Requirements:
- Sonatype OSSRH account
- GPG key for signing
- Approved groupId (org.flossware)
Update pom.xml:
<distributionManagement>
<repository>
<id>ossrh</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
<plugins>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.7.0</version>
<extensions>true</extensions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>3.2.7</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
Deployment:
mvn clean deploy -P release
Users can then:
<dependency>
<groupId>org.flossware</groupId>
<artifactId>jnexus-core</artifactId>
<version>2.0.0</version>
</dependency>
3. Google Play Store (Android)
Requirements
- Google Play Developer account (99 USD one-time fee)
- Privacy policy (required for apps handling credentials)
- Content rating questionnaire
- App screenshots and descriptions
Setup
Create store listing:
- App name: JNexus
- Short description: Manage Sonatype Nexus repositories on Android
- Full description: [Marketing copy about features]
- Screenshots: 4-8 screenshots (phone + tablet)
- Feature graphic: 1024x500 banner
Update build.gradle:
android {
defaultConfig {
versionCode 1
versionName "2.0.0"
}
}
Automated Publishing (Fastlane):
Install Fastlane:
cd jnexus-android
fastlane init
Fastfile:
platform :android do
lane :deploy do
gradle(task: "assembleRelease")
upload_to_play_store(
track: 'production',
apk: 'build/outputs/apk/release/jnexus-android-release.apk'
)
end
end
CI Integration:
- name: Deploy to Google Play
if: startsWith(github.ref, 'refs/tags/v')
run: |
cd jnexus-android
fastlane deploy
env:
PLAY_STORE_JSON_KEY: ${{ secrets.PLAY_STORE_JSON_KEY }}
4. F-Droid (Open-Source Android)
Requirements
- No proprietary dependencies (✅ we're good)
- Reproducible builds
- No tracking/analytics (✅ we're clean)
Setup
Submit to F-Droid:
- Fork fdroiddata repository
- Add metadata file:
Categories:
- Development
License: GPL-3.0-only
SourceCode: https://github.com/FlossWare/jnexus
IssueTracker: https://github.com/FlossWare/jnexus/issues
AutoName: JNexus
Summary: Sonatype Nexus repository manager
Description: |-
JNexus is a tool for managing components in Sonatype Nexus Repository Manager.
Features:
* List and search components
* Advanced filtering (size, date, type)
* Safe deletion with dry-run mode
* Repository statistics and analytics
* Encrypted credential storage (AES-256-GCM)
Builds:
- versionName: '2.0.0'
versionCode: 1
commit: v2.0.0
subdir: jnexus-android
gradle:
- release
MaintainerNotes: Reproducible builds enabled.
- Create pull request
- Wait for F-Droid review (1-2 weeks)
Users can then:
# Add F-Droid repo (one-time)
# Install JNexus from F-Droid app
5. Apple App Store (iOS/macOS)
Requirements
- Apple Developer Program membership (99 USD/year)
- Privacy policy
- App screenshots
- App review (manual process, 1-2 days)
Setup
Create App Store Connect listing:
- App name: JNexus
- Bundle ID: org.flossware.jnexus
- Screenshots: iPhone, iPad, macOS
- Privacy policy: Host at github.io
Automated Publishing (Fastlane):
Fastfile:
platform :ios do
lane :release do
build_app(
scheme: "JNexus-iOS",
export_method: "app-store"
)
upload_to_app_store(
skip_screenshots: true,
skip_metadata: false,
submit_for_review: true,
automatic_release: true
)
end
end
platform :mac do
lane :release do
build_app(
scheme: "JNexus-macOS",
export_method: "mac-app-store"
)
upload_to_app_store(
platform: "osx",
submit_for_review: true
)
end
end
CI Integration:
- name: Deploy to App Store
if: startsWith(github.ref, 'refs/tags/v')
run: |
cd jnexus-ios
fastlane ios release
fastlane mac release
env:
APP_STORE_CONNECT_API_KEY: ${{ secrets.APP_STORE_API_KEY }}
6. Snap (Linux)
Create snapcraft.yaml:
name: jnexus
version: '2.0.0'
summary: Sonatype Nexus repository manager
description: |
Manage components in Sonatype Nexus Repository Manager with CLI and GUI interfaces.
grade: stable
confinement: strict
apps:
jnexus:
command: java -jar $SNAP/jnexus.jar
plugs:
- network
- home
parts:
jnexus:
plugin: maven
source: .
build-packages:
- openjdk-21-jdk
stage-packages:
- openjdk-21-jre
Build and publish:
snapcraft
snapcraft upload jnexus_2.0.0_amd64.snap --release=stable
Acceptance Criteria
Installation Documentation
Update README.md with all methods:
## Installation
### macOS
```bash
brew install flossware/tap/jnexus
Linux
# Snap
sudo snap install jnexus
# Or download JAR
wget https://github.com/FlossWare/jnexus/releases/latest/download/jnexus.jar
Android
- Google Play Store: [link]
- F-Droid: [link]
- Direct APK: [GitHub Releases]
iOS
As Library (Maven)
<dependency>
<groupId>org.flossware</groupId>
<artifactId>jnexus-core</artifactId>
<version>2.0.0</version>
</dependency>
## Priority
Low-Medium - High impact on discoverability but time-intensive
## Related
- #73: Unified release workflow (builds the artifacts)
Overview
Distribute JNexus through standard package managers for easier installation and automatic updates.
Current State
CI/CD Score Impact
Current: CI/CD A- (90/100)
With #73 + this: CI/CD A+ (98/100)
Platform Distribution Matrix
1. Homebrew Tap (macOS + Linux)
Setup
Create flossware/homebrew-tap repository:
Formula:
Installation:
brew tap flossware/tap brew install jnexus # Or one-liner: brew install flossware/tap/jnexusUpdate workflow (.github/workflows/homebrew.yml):
2. Maven Central (Java Libraries)
Setup
Why: jnexus-core can be consumed as a library by other Java projects.
Requirements:
Update pom.xml:
Deployment:
Users can then:
3. Google Play Store (Android)
Requirements
Setup
Create store listing:
Update build.gradle:
Automated Publishing (Fastlane):
Install Fastlane:
cd jnexus-android fastlane initFastfile:
CI Integration:
4. F-Droid (Open-Source Android)
Requirements
Setup
Submit to F-Droid:
Users can then:
5. Apple App Store (iOS/macOS)
Requirements
Setup
Create App Store Connect listing:
Automated Publishing (Fastlane):
Fastfile:
CI Integration:
6. Snap (Linux)
Create snapcraft.yaml:
Build and publish:
Acceptance Criteria
Installation Documentation
Update README.md with all methods:
Linux
Android
iOS
As Library (Maven)