आप संबंधित कुछ भी MAVEN का उपयोग किए बिना ABSOLUTELY कर सकते हैं । मैं व्यक्तिगत रूप से Nava HttpClient (v1.8.16, java6 का समर्थन करने के लिए) का उपयोग करता हूं।
जो भी कारण हो, सोनाटाइप इसे अविश्वसनीय बनाता है पता लगाने के लिए मुश्किल कि सही यूआरएल, हेडर और पेलोड क्या होने चाहिए; और मुझे ट्रैफ़िक सूँघना था और अनुमान लगाना था ... वहाँ कुछ मुश्किल से उपयोगी ब्लॉग / दस्तावेज हैं, हालाँकि यह या तो अप्रासंगिक है oss.sonatype.org
, या यह XML आधारित है (और मुझे पता चला कि यह काम भी नहीं करता है)। उनके भाग, IMHO, और उम्मीद है कि भविष्य के चाहने वालों के लिए इस दस्तावेज़ को बकवास उपयोगी पा सकते हैं। Https://stackoverflow.com/a/33414423/2101812 को उनके पोस्ट के लिए बहुत धन्यवाद , क्योंकि इससे बहुत मदद मिली।
यदि आप इसके अलावा कहीं और जारी करते हैं oss.sonatype.org
, तो इसे सही मेजबान के साथ जो कुछ भी है उसे बदल दें।
यहाँ (CC0 लाइसेंस प्राप्त) कोड है जो मैंने इसे पूरा करने के लिए लिखा था। कहाँ पेprofile
अपने sonatype / गठजोड़ profileID (जैसे है 4364f3bbaf163
) और repo
(जैसे comdorkbox-1003
) प्रतिक्रिया जब आप अपने प्रारंभिक पोम / जार अपलोड से पार्स कर रहे हैं।
रेपो बंद करें:
/**
* Closes the repo and (the server) will verify everything is correct.
* @throws IOException
*/
private static
String closeRepo(final String authInfo, final String profile, final String repo, final String nameAndVersion) throws IOException {
String repoInfo = "{'data':{'stagedRepositoryId':'" + repo + "','description':'Closing " + nameAndVersion + "'}}";
RequestBuilder builder = new RequestBuilder("POST");
Request request = builder.setUrl("https://oss.sonatype.org/service/local/staging/profiles/" + profile + "/finish")
.addHeader("Content-Type", "application/json")
.addHeader("Authorization", "Basic " + authInfo)
.setBody(repoInfo.getBytes(OS.UTF_8))
.build();
return sendHttpRequest(request);
}
रेपो को बढ़ावा दें:
/**
* Promotes (ie: release) the repo. Make sure to drop when done
* @throws IOException
*/
private static
String promoteRepo(final String authInfo, final String profile, final String repo, final String nameAndVersion) throws IOException {
String repoInfo = "{'data':{'stagedRepositoryId':'" + repo + "','description':'Promoting " + nameAndVersion + "'}}";
RequestBuilder builder = new RequestBuilder("POST");
Request request = builder.setUrl("https://oss.sonatype.org/service/local/staging/profiles/" + profile + "/promote")
.addHeader("Content-Type", "application/json")
.addHeader("Authorization", "Basic " + authInfo)
.setBody(repoInfo.getBytes(OS.UTF_8))
.build();
return sendHttpRequest(request);
}
ड्रॉप रेपो:
/**
* Drops the repo
* @throws IOException
*/
private static
String dropRepo(final String authInfo, final String profile, final String repo, final String nameAndVersion) throws IOException {
String repoInfo = "{'data':{'stagedRepositoryId':'" + repo + "','description':'Dropping " + nameAndVersion + "'}}";
RequestBuilder builder = new RequestBuilder("POST");
Request request = builder.setUrl("https://oss.sonatype.org/service/local/staging/profiles/" + profile + "/drop")
.addHeader("Content-Type", "application/json")
.addHeader("Authorization", "Basic " + authInfo)
.setBody(repoInfo.getBytes(OS.UTF_8))
.build();
return sendHttpRequest(request);
}
हस्ताक्षर की कलियाँ हटाएँ:
/**
* Deletes the extra .asc.md5 and .asc.sh1 'turds' that show-up when you upload the signature file. And yes, 'turds' is from sonatype
* themselves. See: https://issues.sonatype.org/browse/NEXUS-4906
* @throws IOException
*/
private static
void deleteSignatureTurds(final String authInfo, final String repo, final String groupId_asPath, final String name,
final String version, final File signatureFile)
throws IOException {
String delURL = "https://oss.sonatype.org/service/local/repositories/" + repo + "/content/" +
groupId_asPath + "/" + name + "/" + version + "/" + signatureFile.getName();
RequestBuilder builder;
Request request;
builder = new RequestBuilder("DELETE");
request = builder.setUrl(delURL + ".sha1")
.addHeader("Authorization", "Basic " + authInfo)
.build();
sendHttpRequest(request);
builder = new RequestBuilder("DELETE");
request = builder.setUrl(delURL + ".md5")
.addHeader("Authorization", "Basic " + authInfo)
.build();
sendHttpRequest(request);
}
फ़ाइल अपलोड:
public
String upload(final File file, final String extension, String classification) throws IOException {
final RequestBuilder builder = new RequestBuilder("POST");
final RequestBuilder requestBuilder = builder.setUrl(uploadURL);
requestBuilder.addHeader("Authorization", "Basic " + authInfo)
.addBodyPart(new StringPart("r", repo))
.addBodyPart(new StringPart("g", groupId))
.addBodyPart(new StringPart("a", name))
.addBodyPart(new StringPart("v", version))
.addBodyPart(new StringPart("p", "jar"))
.addBodyPart(new StringPart("e", extension))
.addBodyPart(new StringPart("desc", description));
if (classification != null) {
requestBuilder.addBodyPart(new StringPart("c", classification));
}
requestBuilder.addBodyPart(new FilePart("file", file));
final Request request = requestBuilder.build();
return sendHttpRequest(request);
}
EDIT1:
रेपो के लिए गतिविधि / स्थिति कैसे प्राप्त करें
/**
* Gets the activity information for a repo. If there is a failure during verification/finish -- this will provide what it was.
* @throws IOException
*/
private static
String activityForRepo(final String authInfo, final String repo) throws IOException {
RequestBuilder builder = new RequestBuilder("GET");
Request request = builder.setUrl("https://oss.sonatype.org/service/local/staging/repository/" + repo + "/activity")
.addHeader("Content-Type", "application/json")
.addHeader("Authorization", "Basic " + authInfo)
.build();
return sendHttpRequest(request);
}