ম্যাভেন ছাড়াই নেক্সাসে শিল্পকলা আপলোড করুন


102

আমার একটি জাভাবিহীন প্রকল্প রয়েছে যা একটি সংস্করণযুক্ত বিল্ড আর্টিক্ট উত্পাদন করে এবং আমি এটি একটি নেক্সাস সংগ্রহস্থলে আপলোড করতে চাই। কারণ প্রকল্পটি জাভা নয়, এটি বিল্ডগুলির জন্য ম্যাভেন ব্যবহার করে না। এবং আমি কেবলমাত্র নেক্সাসে ফাইল আনার জন্য মাভেন / পিওএম ফাইলগুলি প্রবর্তন করব না।

Nexus REST এপিআই-এর ব্লগগুলির লিঙ্কগুলি সাইন-ইন প্রাচীরে শেষ হয়, আমি দেখতে পাচ্ছি এমন কোনও "ব্যবহারকারী তৈরি করুন" লিঙ্ক ছাড়াই।

সুতরাং, মাভেন ছাড়াই কোনও নেক্সাস রিপোজিটরিতে বিল্ড আর্টফিটগুলি আপলোড করার সেরা (বা কোনও যুক্তিসঙ্গত) উপায় কী? "বাশ + কার্ল" দুর্দান্ত, এমনকি পাইথন স্ক্রিপ্ট।


দ্রষ্টব্য, আপনার কাছে যথাযথ সার্ভার এবং প্রমাণীকরণ সংজ্ঞায়িত করে ~ / .m2 এ একটি सेटिंग.xml আছে তা নিশ্চিত করুন।
অ্যাডাম ভ্যান্ডেনবার্গ

উত্তর:


98

আপনি কি ফাইল আপলোড করতে মাভেন কমান্ড-লাইনটি ব্যবহারের কথা বিবেচনা করছেন?

mvn deploy:deploy-file \
    -Durl=$REPO_URL \
    -DrepositoryId=$REPO_ID \
    -DgroupId=org.myorg \
    -DartifactId=myproj \
    -Dversion=1.2.3  \
    -Dpackaging=zip \
    -Dfile=myproj.zip

এটি শিল্পকর্মের জন্য স্বয়ংক্রিয়ভাবে ম্যাভেন পিওএম তৈরি করবে।

হালনাগাদ

নিম্নলিখিত সোনাটাইপ নিবন্ধে বলা হয়েছে যে "ডিপ্লয়-ফাইল" মাভেন প্লাগইনটি সবচেয়ে সহজ সমাধান তবে এটি কার্ল ব্যবহার করে কিছু উদাহরণও সরবরাহ করে:

https://support.sonatype.com/entries/22189106-How-can-I-programatically-upload-an-artifact-into-Nexus-


যদি কেবলমাত্র এটিই আমাদের সরাসরি এই পিনের মধ্যে থেকে ফাইলগুলি ডাউনলোড করার অনুমতি দেয় তবে মনে হয় আপনি যদি এটির মতো আপলোড করেন তবে সম্ভব নয়।
সোরিন

@ সোরিন মাভেন ব্যবহার করে কোনও জিপ থেকে ফাইলগুলি ডাউনলোড করা সম্ভব নয়। এটি একটি অস্বাভাবিক প্রয়োজন এবং একমাত্র নির্ভরশীলতা পরিচালক যা আমি জানি এটি আইভি (এবং এটি সহজ নয়) নিম্নলিখিত উদাহরণটি দেখুন: স্ট্যাকওভারফ্লো
মার্ক ও'কনর

আমি এটিকে সব আরও সহজ করে তুলতে নেক্সাস ইনস্টল করেছি, তবে ব্লেজে এটি কী? .. আমার যদি কিছুটা বাড়িতে তৈরি জেআর এর নির্ভরতা না জেনে থাকে তবে কী হবে? আমার আইডিই হারিয়ে যাওয়া * .পোম সম্পর্কে অভিযোগ করে চলে। আমি আশা করেছি যে নেক্সাস ইতিমধ্যে আমার পক্ষে এটি পরিচালনা করেছেন, তবে নুও শ ...
ভিঞ্জপ্রাইক্ট

66

কার্ল ব্যবহার:

curl -v \
    -F "r=releases" \
    -F "g=com.acme.widgets" \
    -F "a=widget" \
    -F "v=0.1-1" \
    -F "p=tar.gz" \
    -F "file=@./widget-0.1-1.tar.gz" \
    -u myuser:mypassword \
    http://localhost:8081/nexus/service/local/artifact/maven/content

প্যারামিটারগুলি এখানে কী বোঝায় তা আপনি দেখতে পারেন: https://support.sonatype.com/entries/22189106- How-can-I-programatic-upload-an-artifact-into- Nexus-

এই কাজের অনুমতি পাওয়ার জন্য, আমি অ্যাডমিন জিইআইতে একটি নতুন ভূমিকা তৈরি করেছি এবং আমি সেই ভূমিকায় দুটি সুবিধা যুক্ত করেছি: আর্টিফ্যাক্ট ডাউনলোড এবং আর্টিফ্যাক্ট আপলোড। স্ট্যান্ডার্ড "রেপো: সমস্ত ম্যাভেন সংগ্রহশালা (সম্পূর্ণ নিয়ন্ত্রণ)" - ভূমিকা যথেষ্ট নয়। নেক্সাস সার্ভারের সাথে বান্ডিল হওয়া আরএএসটি এপিআই ডকুমেন্টেশনে আপনি এটি পাবেন না, যাতে ভবিষ্যতে এই প্যারামিটারগুলি পরিবর্তন হতে পারে।

উপর একটি Sonatype জির ইস্যু , এটা উল্লেখ করা হয়েছিল যে, তারা "সম্ভবত এই বছরের শেষের দিকে একটি আসন্ন রিলিজ বিশ্রাম API (এবং উপায় এটা ডকুমেন্টেশন উৎপন্ন হয়) পুনর্গঠনের, যাচ্ছি"।


আসুন আমরা জেনকিন্স থেকে প্রকাশ করি এবং কেবলমাত্র বিল্ড ব্যবহারকারীদেরই নেক্সাসে প্রকাশের অনুমতি দিই, আপনি কীভাবে সরল পাসওয়ার্ড ইস্যু পরিচালনা করবেন? জেনকিনসের কী আপলোডের জন্য একটি প্লাগইন রয়েছে যাতে আমরা জেনকিনস শংসাপত্রগুলি ব্যবহার করতে পারি?
জিরং হু

8

এই কমান্ডগুলি ব্যবহার করার দরকার নেই .. আপনি GAV পরামিতিগুলি ব্যবহার করে আপনার জেআর আপলোড করতে সরাসরি Nexus ওয়েব ইন্টারফেস ব্যবহার করতে পারেন।

এখানে চিত্র বর্ণনা লিখুন

সুতরাং এটি খুব সহজ।


24
একটি জিইউআই সাহায্য করে না; বিল্ড প্রক্রিয়াটির অংশ হিসাবে ব্যবহৃত কমান্ড-লাইন স্ক্রিপ্টের মাধ্যমে আমার আপলোড করতে সক্ষম হওয়া দরকার।
অ্যাডাম ভ্যান্ডেনবার্গ

ঠিক আছে, এটি একটি এইচটিটিপি পোস্ট অনুরোধটিতে অনুবাদ করে, আপনি কি ভাবেন না?
ইয়াংভে স্নিন লিন্ডাল

5
@ ইয়ংভেস্নি লিন্ডাল শিওর, তবে এর অর্থ এই নয় যে এই পোষ্ট যুক্তিগুলি সর্বজনীনভাবে ব্যবহার করার জন্য একটি সু-সংজ্ঞায়িত এপিআই।
কেন উইলিয়ামস

@ কেন উইলিয়ামস শিওর, আমিও দাবি করি নি। তবে তারা কাজ করবে এবং একটি সমাধান উপস্থাপন করবে, এটি আমার বক্তব্য।
ইয়াংভে স্নিন লিন্ডাল

কমপক্ষে, আমাদের সোনাটাইপ নেক্সাসের জন্য 11 2.11.1-01 আমাকে ব্যবহারকারীকে এই সুযোগটি দিতে হয়েছিল Artifact Upload। দুর্ভাগ্যক্রমে, আমি ডক্সে এটি উল্লেখ করার মতো কিছু খুঁজে পাইনি ... (সম্পাদনা: আমি দেখছি, এড আমি ইতিমধ্যে এটি দেখিয়েছি )
আলবার্তো

8

আপনি করতে পারেন কোনোরকম কিছু ম্যাভেন সম্পর্কিত ব্যবহার না করেই এই কাজ। আমি ব্যক্তিগতভাবে জাং 6 সমর্থন করার জন্য নিং এইচটিপিপিলেট (v1.8.16) ব্যবহার করি।

যে কারণেই হোক না কেন, সুনাটাইপ সঠিক ইউআরএল, শিরোনাম এবং পে-লোডগুলি কী বলে মনে হচ্ছে তা নির্ধারণে অবিশ্বাস্যরূপে অসুবিধা সৃষ্টি করে; এবং আমাকে ট্র্যাফিক স্নিগ্ধ করতে হয়েছিল এবং অনুমান করতে হয়েছিল ... সেখানে কিছু সবেমাত্র দরকারী ব্লগ / ডকুমেন্টেশন রয়েছে তবে এটি হয় অপ্রাসঙ্গিক oss.sonatype.org, বা এটি এক্সএমএল ভিত্তিক (এবং আমি জানতে পেরেছিলাম এটি এমনকি কার্যকর হয় না)। আইএমএইচও, এবং আশা করি ভবিষ্যতের সন্ধানকারীরা এই উত্তরটি দরকারী বলে খুঁজে পেতে পারেন document তাদের পোস্টের জন্য https://stackoverflow.com/a/33414423/2101812 কে অনেক ধন্যবাদ , কারণ এটি অনেক সহায়তা করেছে।

যদি আপনি ব্যতীত অন্য কোথাও মুক্তি পান oss.sonatype.orgতবে সঠিক হোস্টটি যা-ই হোক, কেবল এটির সাথে প্রতিস্থাপন করুন।

এটি সম্পাদন করার জন্য আমি এখানে লিখেছি (সিসি0 লাইসেন্সযুক্ত) কোড is কোথায় profileআপনার sonatype / Nexus profileID (যেমন হয় 4364f3bbaf163) এবং repo(যেমন comdorkbox-1003) প্রতিক্রিয়া যখন আপনি আপনার প্রাথমিক খুলুন POM / জার আপলোড থেকে পার্স করা হয়।

বন্ধ

/**
 * 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);
}

6

আপনাকে নেক্সাসের বিরুদ্ধে যে কলগুলি করতে হবে তা হ'ল রিস্ট এপিআই কল।

ম্যাভেন-নেক্সাস-প্লাগইন একটি মাভেন প্লাগইন যা আপনি এই কলগুলি করতে ব্যবহার করতে পারেন। আপনি প্রয়োজনীয় বৈশিষ্ট্য সহ একটি ডামি পম তৈরি করতে পারেন এবং মাভেন প্লাগইনটির মাধ্যমে সেই কলগুলি করতে পারেন।

কিছুটা এইরকম:

mvn -DserverAuthId=sonatype-nexus-staging -Dauto=true nexus:staging-close

ধরে নেওয়া জিনিস:

  1. আপনি আপনার সোনাটাইপ ব্যবহারকারী এবং পাসওয়ার্ড সেটআপ সহ আপনার। / .M2 / settings.xML নামের সোনাইটাইপ-নেক্সাস-স্টেজিংয়ে একটি সার্ভার সংজ্ঞায়িত করেছেন - আপনি যদি স্ন্যাপশট স্থাপন করছেন তবে আপনি সম্ভবত ইতিমধ্যে এটি সম্পন্ন করেছেন। তবে আপনি এখানে আরও তথ্য পেতে পারেন ।
  2. আপনার স্থানীয় সেটিংস.এক্সএমএলে এখানে উল্লিখিত হিসাবে নেক্সাস প্লাগইন রয়েছে ।
  3. আপনার বর্তমান ডিরেক্টরিটিতে বসে থাকা pom.xML এর সংজ্ঞাটিতে সঠিক মাভেন স্থানাঙ্ক রয়েছে। যদি তা না হয় তবে আপনি কমান্ড লাইনে গ্রুপআইড, আর্টিফ্যাক্টআইডি এবং সংস্করণ নির্দিষ্ট করতে পারেন।
  4. -ডাটো = সত্য ইন্টারেক্টিভ প্রম্পটগুলি বন্ধ করে দেবে যাতে আপনি এটি স্ক্রিপ্ট করতে পারেন।

শেষ পর্যন্ত, এই সব করছে নেক্সাসে আরএসটি কল তৈরি করা। এখানে একটি সম্পূর্ণ নেক্সাস আরএসটি এপিআই রয়েছে তবে এটির জন্য পেইউলের পিছনে নেই এমন নথিপত্র খুঁজে পেতে আমার ভাগ্য খুব কমই আছে। আপনি উপরের প্লাগইনটির জন্য ডিবাগ মোডটি চালু করতে পারেন এবং এটি ব্যবহার করে বের করতে পারেন -Dnexus.verboseDebug=true -X

আপনি তাত্ত্বিকভাবে ইউআইতে যেতে পারেন, ফায়ারব্যাগ নেট প্যানেলটি চালু করতে এবং / পরিষেবা পোষ্টগুলির জন্য নজর রাখতে এবং সেখানে একটি পথও অনুমিত করতে পারেন।


3

যাঁদের জাভাতে এটি দরকার তাদের জন্য অ্যাপাচি httpcompघালিণী 4.0 ব্যবহার করুন:

public class PostFile {
    protected HttpPost httppost ;
    protected MultipartEntity mpEntity; 
    protected File filePath;

    public PostFile(final String fullUrl, final String filePath){
        this.httppost = new HttpPost(fullUrl);
        this.filePath = new File(filePath);        
        this.mpEntity = new MultipartEntity();
    }

    public void authenticate(String user, String password){
        String encoding = new String(Base64.encodeBase64((user+":"+password).getBytes()));
        httppost.setHeader("Authorization", "Basic " + encoding);
    }
    private void addParts() throws UnsupportedEncodingException{
        mpEntity.addPart("r", new StringBody("repository id"));
        mpEntity.addPart("g", new StringBody("group id"));
        mpEntity.addPart("a", new StringBody("artifact id"));
        mpEntity.addPart("v", new StringBody("version"));
        mpEntity.addPart("p", new StringBody("packaging"));
        mpEntity.addPart("e", new StringBody("extension"));

        mpEntity.addPart("file", new FileBody(this.filePath));

    }

    public String post() throws ClientProtocolException, IOException {
        HttpClient httpclient = new DefaultHttpClient();
        httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
        addParts();
        httppost.setEntity(mpEntity);
        HttpResponse response = httpclient.execute(httppost);

        System.out.println("executing request " + httppost.getRequestLine());
        System.out.println(httppost.getEntity().getContentLength());

        HttpEntity resEntity = response.getEntity();

        String statusLine = response.getStatusLine().toString();
        System.out.println(statusLine);
        if (resEntity != null) {
            System.out.println(EntityUtils.toString(resEntity));
        }
        if (resEntity != null) {
            resEntity.consumeContent();
        }
        return statusLine;
    }
}

প্রথম পোস্ট. আমি জাভাটির জন্য হাইলাইটলিং যুক্ত করার চেষ্টা করেছি কিন্তু তা পেলাম না।
ম্যাকমোসফেট

3

রুবিতে https://github.com/RiotGames/nexus_cli সোনাটাইপ নেক্সাস আরইএসটি কলের চারপাশে একটি সি এল এল র‌্যাপার।

ব্যবহারের উদাহরণ:

nexus-cli push_artifact com.mycompany.artifacts:myartifact:tgz:1.0.0 ~/path/to/file/to/push/myartifact.tgz

কনফিগারেশন .nexus_cliফাইল মাধ্যমে করা হয় ।

url:            "http://my-nexus-server/nexus/"
repository:     "my-repository-id"
username:       "username"
password:       "password"

2

আপনি কার্ল ব্যবহার করে সরাসরি মোতায়েনের পদ্ধতিও ব্যবহার করতে পারেন। এটির জন্য আপনার ফাইলের জন্য আপনার কোনও পম লাগবে না তবে এটি উত্পন্ন হবে না তাই আপনি যদি চান তবে এটি আলাদাভাবে আপলোড করতে হবে।

আদেশটি এখানে:

version=1.2.3
artefact="myartefact"
repoId=yourrepository
groupId=org.myorg
REPO_URL=http://localhost:8081/nexus

curl -u nexususername:nexuspassword --upload-file filename.tgz $REPO_URL/content/repositories/$repoId/$groupId/$artefact/$version/$artefact-$version.tgz

"আর্টিফ্যাক্ট"
রাম

1

আপনার যদি কোনও সুবিধাজনক কমান্ড লাইন ইন্টারফেস বা পাইথন এপিআই দরকার হয় তবে সংগ্রহস্থলগুলি দেখুন

এটি ব্যবহার করে, আপনি কমান্ড সহ নেক্সাসে আর্টিক্ট আপলোড করতে পারেন

artifact upload foo-1.2.3.ext releases com.fooware

এটি কার্যকর করতে, আপনাকে কিছু পরিবেশের ভেরিয়েবলও সেট করতে হবে

export REPOSITORY_URL=https://repo.example.com
export REPOSITORY_USER=admin
export REPOSITORY_PASSWORD=mysecretpassword

0

আপনি নেক্সাস সার্ভারে আর্টিক্টসগুলি আপলোড বা ম্যানুয়ালি আপলোড করতে পারেন এবং আপলোড করার জন্য প্রয়োজনীয় জিএভি বৈশিষ্ট্য সরবরাহ করতে পারেন (এটি সাধারণত আর্টিফ্যাক্ট সংরক্ষণের জন্য ফাইল কাঠামো)


0

Nexus OSS এর সাম্প্রতিক সংস্করণের জন্য (> = 3.9.0)

https://support.sonatype.com/hc/en-us/articles/115006744008-How-can-I-programmatically-upload-files-into-Nexus-3-

সংস্করণগুলির জন্য উদাহরণ 3.9.0 থেকে 3.13.0:

curl -D - -u user:pass -X POST "https://nexus.domain/nexus/service/rest/beta/components?repository=somerepo" -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "raw.directory=/test/" -F "raw.asset1=@test.txt;type=application/json" -F "raw.asset1.filename=test.txt"

-1

@ অ্যাডাম ভ্যান্ডেনবার্গ জাভা কোডের জন্য নেক্সাসে পোষ্ট করুন। https://github.com/manbalagan/nexusuploader

public class NexusRepository implements RepoTargetFactory {

    String DIRECTORY_KEY= "raw.directory";
    String ASSET_KEY= "raw.asset1";
    String FILENAME_KEY= "raw.asset1.filename";

    String repoUrl;
    String userName;
    String password;

    @Override
    public void setRepoConfigurations(String repoUrl, String userName, String password) {
        this.repoUrl = repoUrl;
        this.userName = userName;
        this.password = password;
    }

    public String pushToRepository() {
        HttpClient httpclient = HttpClientBuilder.create().build();
        HttpPost postRequest = new HttpPost(repoUrl) ;
        String auth = userName + ":" + password;
        byte[] encodedAuth = Base64.encodeBase64(
                auth.getBytes(StandardCharsets.ISO_8859_1));
        String authHeader = "Basic " + new String(encodedAuth);
        postRequest.setHeader(HttpHeaders.AUTHORIZATION, authHeader);
        try
        {
            byte[] packageBytes = "Hello. This is my file content".getBytes();
            MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
            InputStream packageStream = new ByteArrayInputStream(packageBytes);
            InputStreamBody inputStreamBody = new InputStreamBody(packageStream, ContentType.APPLICATION_OCTET_STREAM);
            multipartEntityBuilder.addPart(DIRECTORY_KEY, new StringBody("DIRECTORY"));
            multipartEntityBuilder.addPart(FILENAME_KEY, new StringBody("MyFile.txt"));
            multipartEntityBuilder.addPart(ASSET_KEY, inputStreamBody);
            HttpEntity entity = multipartEntityBuilder.build();
            postRequest.setEntity(entity); ;

            HttpResponse response = httpclient.execute(postRequest) ;
            if (response != null)
            {
                System.out.println(response.getStatusLine().getStatusCode());
            }
        }
        catch (Exception ex)
        {
            ex.printStackTrace() ;
        }
        return null;
    }

}

-2

পরিবর্তে আপনি কার্ল ব্যবহার করতে পারেন।

version=1.2.3
artifact="artifact"
repoId=repositoryId
groupId=org/myorg
REPO_URL=http://localhost:8081/nexus

curl -u username:password --upload-file filename.tgz $REPO_URL/content/repositories/$repoId/$groupId/$artefact/$version/$artifact-$version.tgz

এই উত্তরটি সঠিক নয়। কার্ল সহ, গ্রুপ আইডকে org / myorg হিসাবে উপস্থাপন করা উচিত (বিন্দু "।" স্ল্যাশ "/" সহ)
মাদ্রিপদী
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.