কোনও মাভেন প্রকল্পে কীভাবে স্থানীয় জার ফাইল যুক্ত করবেন?


1169

আমি কীভাবে সরাসরি আমার প্রকল্পের লাইব্রেরি উত্সগুলিতে স্থানীয় জার ফাইলগুলি (এখনও মাভেন সংগ্রহস্থলের অংশ না) যুক্ত করব?


1
হাই @ প্রনীল পিডিকিটি, আপনি কি দয়া করে সর্বাধিক ভোট দিয়ে উত্তরটির উত্তরটি পরিবর্তন করতে পারেন?
নাল

1
@nslntmnx যে ভাল সমাধান হবে না, হিসাবে সব সমাধান অপূর্ণতা আছে stackoverflow.com/questions/364114/...
পল Verest

আপনার লিব আপডেট বা অনুষ্ঠানে বাড়ানো আছে কিনা তা দেখতে এই উত্তর করতে আমি আমার লিব থেকে সব বয়াম লোড করতে ম্যাভেন সঙ্গে ফোল্ডারের প্রকল্প চান একটি "pomified" উপায় এবং এই ধরনের একটি অতিরিক্ত রেপো ফোল্ডার এবং কষ্টকর cmd কমান্ড লাইন বা এড়ানো install-fileস্ক্রিপ্ট।
জেরোল্ডব্রোজার মনিকা 19 ই

উত্তর:


698

আপনার স্থানীয় মাভেন সংগ্রহস্থলে জারটি ইনস্টল করুন:

mvn install:install-file \
   -Dfile=<path-to-file> \
   -DgroupId=<group-id> \
   -DartifactId=<artifact-id> \
   -Dversion=<version> \
   -Dpackaging=<packaging> \
   -DgeneratePom=true

যেখানে প্রতিটি উল্লেখ করে:

<path-to-file>: ফাইল লোড করার পথ যেমন → c:\kaptcha-2.3.jar

<group-id>: যে গ্রুপটি ফাইলটি যেমন → এর অধীনে নিবন্ধিত হওয়া উচিত → com.google.code

<artifact-id>: উদাহরণস্বরূপ ফাইলের জন্য শিল্পীকরণের নাম → kaptcha

<version>: ফাইলের সংস্করণ যেমন → 2.3

<packaging>: ফাইলের প্যাকেজিং যেমন → jar

উল্লেখ


7
আমার বিল্ডে ইনস্টল করার নির্দেশনায় জেনারেটপম অংশটি ব্যতীত সমস্ত কিছুই ছিল। এটি গুরুত্বপূর্ণ বলে মনে হচ্ছে।
জেসন ডি

4
<path-to-file> এর অর্থ কী? ভালো লেগেছে সি: /Users/XXX/WorkspaceDocx/maven/src/main/resources/myJar.jar ...... অথবা আমরা $ {project.basedir} /src/main/resources/myJar.jar কি করতে পারেন
ইগর Beaufils

17
উত্তরে একটি README বা জারগুলি বয়ে আনা হবে তা উল্লেখ করা হয়নি। যাইহোক, যদি প্রকল্পটি জারগুলি বয়ে আনে তবে আপনি এখানে পাশাপাশি উল্লেখ করতে পারেন প্রকল্পটি রেপো রাখতে পারবেন এখানে stackoverflow.com/a/36602256/1000011 তবে আপনার পুনর্নির্মাণের কোনও প্রয়োজন নেই কারণ প্রকল্পটি কেবল জারগুলি যেমন কাজ করবে তেমন কোনও অতিরিক্ত ম্যানুয়াল পদক্ষেপ ছাড়াই মাভেন সেন্টারে ছিল।
অপ্টিসাইক্লিক

8
@ আপ্টিসাইক্লিক আপনার মন্তব্যে আরও বেশি পরিমাণের প্রয়োজন, বা এই উত্তরটি সম্পাদনা করা দরকার। এটি নবীনদের জন্য বিপর্যয়ের একটি রেসিপি যারা বুঝতে পারে না যে স্থানীয় মাভেন রেপো ইনস্টল করা অন্য সবার জন্য অন্তর্ভুক্ত থাকবে না।
মাইক এস


1425

আপনি সরাসরি স্থানীয় নির্ভরতা যুক্ত করতে পারেন ( মালিকানাধীন লাইব্রেরি সহ বিল্ড মাভেন প্রকল্পে উল্লিখিত ) এর মতো:

<dependency>
    <groupId>com.sample</groupId>
    <artifactId>sample</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/Name_Your_JAR.jar</systemPath>
</dependency>

হালনাগাদ

নতুন প্রকাশে এই বৈশিষ্ট্যটিকে অবচিত হিসাবে চিহ্নিত করা হয়েছে তবে এখনও কাজ করছে এবং এখনও সরানো হয়নি (আপনি কেবল ম্যাগন শুরুর সময় লগটিতে সতর্কতা দেখেন)। এই https://issues.apache.org/jira/browse/MNG-6523 সম্পর্কে মার্ভেন গ্রুপে একটি ইস্যু উত্থাপিত হয়েছে (আপনি কিছু অংশে কেন এই বৈশিষ্ট্যটি সহায়ক তা আপনি অংশ নিতে পারেন এবং বর্ণনা করতে পারেন) । আমি আশা করি এই বৈশিষ্ট্যটি সেখানেই থাকবে!

তুমি কি আমাকে জিজ্ঞাসা করা হয় তাহলে, যতদিন বৈশিষ্ট্য মুছে ফেলা না হয়, আমি এই ব্যবহার করতে কেবল নির্ভরতা করা এক দুষ্টু বয়াম ফাইল আমার প্রকল্প যা সংগ্রহস্থলের মধ্যে মাপসই করা হয় না। যদি এই বৈশিষ্ট্যটি সরানো হয় তবে ভাল, এখানে প্রচুর ভাল উত্তর রয়েছে যা আমি পরে থেকে বেছে নিতে পারি!


49
এমন অনেক সময় রয়েছে যখন আপনি উদাহরণস্বরূপ কোনও পুরানো জারটি বিশেষভাবে পরীক্ষা করতে চান এবং আমি মনে করি যে এই উত্তরটি এর জন্য ভাল। এটি আমার প্রয়োজন ছিল। আপভোটড
জন লকউড 21

36
দেখতে যত সুন্দর এবং সহজ, এই সমাধানটিতে সমস্যা রয়েছে যে আপনার জার.জার আপনার অ্যাপ্লিকেশনটির জন্য কোনও ওয়ার ফাইলটিতে অন্তর্ভুক্ত করা হবে না।
ম্যাথিয়াস

40
সর্বোপরি সমাধান আর কাজ করে না, এটি ফেরৎ: " 'dependencies.dependency.systemPath' xx.jar প্রকল্পের ডিরেক্টরির মধ্যে ফাইল এ বিন্দু উচিত না" এই ইতিমধ্যেই মোকাবিলা করা হয়েছে stackoverflow.com/questions/10935135/...
সারাহ .ferguson

8
এই উত্তরে নয় artifactIdএবং groupIdচারপাশের কুপথ?
theonlygusti

5
মাভেন ডকুমেন্ট অনুসারে ( maven.apache.org/guides/intr پيداوار/… ): গুরুত্বপূর্ণ দ্রষ্টব্য: এটি অবচয় হিসাবে চিহ্নিত।
আগ্রাসনার

141

প্রথমত, আমি একজন অনামী স্ট্যাক ওভারফ্লো ব্যবহারকারীকে এই উত্তরটির জন্য কৃতিত্ব দিতে চাই - আমি নিশ্চিত যে আমি এখানে আগে একই রকম উত্তর দেখেছি - তবে এখন আমি এটি খুঁজে পাচ্ছি না।

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

আমার উদাহরণের জন্য: আমার ${master_project}অবস্থানের উপরে আমার প্রকল্পটি রয়েছে এবং সাবপ্রজেক্ট 1 চালু ${master_project}/${subproject1}

তারপরে আমি এখানে একটি মাভেন সংগ্রহশালা তৈরি করব: ${master_project}/local-maven-repo

সাবপ্রজেক্ট 1 তে অবস্থিত পম ফাইলটিতে ${master_project}/${subproject1}/pom.xml, সংগ্রহস্থলটি নির্দিষ্ট করা দরকার যা URL প্যারামিটার হিসাবে ফাইলের পথ গ্রহণ করবে:

<repositories>
    <repository>
        <id>local-maven-repo</id>
        <url>file:///${project.parent.basedir}/local-maven-repo</url>
    </repository>
</repositories>

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

    <dependency>
        <groupId>org.apache.felix</groupId>
        <artifactId>org.apache.felix.servicebinder</artifactId>
        <version>0.9.0-SNAPSHOT</version>
    </dependency>

সর্বশেষ তবে সবচেয়ে কম কাজটি হ'ল -DlocalRepositoryPath স্যুইচ ব্যবহার করে স্থানীয় সংগ্রহস্থলে JAR ফাইল যুক্ত করা:

mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file  \
    -Dfile=/some/path/on/my/local/filesystem/felix/servicebinder/target/org.apache.felix.servicebinder-0.9.0-SNAPSHOT.jar \
    -DgroupId=org.apache.felix -DartifactId=org.apache.felix.servicebinder \
    -Dversion=0.9.0-SNAPSHOT -Dpackaging=jar \
    -DlocalRepositoryPath=${master_project}/local-maven-repo

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

আমি সম্মত হলাম যে সোর্স কোড রেপোতে জার্স প্রতিশ্রুতিবদ্ধ হওয়া ভাল অনুশীলন নয়, তবে বাস্তব জীবনে দ্রুত এবং নোংরা সমাধানগুলি আপনি প্রকাশ করতে পারবেন না এমন একটি জার হোস্ট করার জন্য সম্পূর্ণ বদ্ধ নেক্সাস রেপোর চেয়ে কখনও কখনও ভাল।



4
আপনি যদি পম.এক্সএমএল করতে চান তবে baeldung.com/install-local-jar-with-maven
কাই ওয়াং

@ কাই ওয়াং এই সমাধানটি আরও ভালভাবে কাজ করে! আপনার সম্ভবত এটি উত্তর হিসাবে যুক্ত করা উচিত।
লকউব্রব

6
যেহেতু ${project.parent.basedir}আজকাল কোনও কিছুর সমাধান করার মতো মনে হচ্ছে না আমি ${project.basedir}/..পুরোপুরি ব্যবহার করেছি এবং কাজ করেছি।
ইমপালার

1
একটি টিপ: দয়া করে চেক করুন $ হোম / .এম 2 / সেটিংস.এক্সএমএল , "স্থানীয়-মেভেন-রেপো" এড়ান সেটিংস / আয়না / আয়না দ্বারা মিরর করা <mirrorOf>*</mirrorOf>
btpka3

125

একটি নতুন ফোল্ডার তৈরি করুন, আসুন local-maven-repoআপনার মাভেন প্রকল্পের মূল বলি ।

আপনার নিজের মধ্যে কেবল একটি স্থানীয় রেপো যুক্ত <project>করুন pom.xml:

<repositories>
    <repository>
        <id>local-maven-repo</id>
        <url>file:///${project.basedir}/local-maven-repo</url>
    </repository>
</repositories>

তারপরে প্রতিটি বাহ্যিক জারের জন্য আপনি ইনস্টল করতে চান, আপনার প্রকল্পের মূলে গিয়ে কার্যকর করুন:

mvn deploy:deploy-file -DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] -Durl=file:./local-maven-repo/ -DrepositoryId=local-maven-repo -DupdateReleaseInfo=true -Dfile=[FILE_PATH]

16
এটি এখানে একমাত্র সঠিক উত্তর কারণ এটি ব্যবহারের সময় ব্যবহারের সময় আপনার রেপোটি সঠিকভাবে তৈরি করবে।
অপ্টিসাইক্লিক

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

2
@ ব্যবহারকারী2748659 হ্যাঁ যদি আপনার সিআই বিল্ড সার্ভারগুলিতে ফোল্ডারটি local-maven-repoআপনার উত্স ফোল্ডারে অন্তর্ভুক্ত করা হয় (এই উদাহরণে শিশু হিসাবে)
অ্যান্থনি ও

3
এই উত্তরটি আমার পক্ষে কাজ করেছিল। একটি ভাগ করা প্রকল্পের জন্য, প্রকল্প ডিরেক্টরিতে রেপো রাখা এবং সংস্করণ নিয়ন্ত্রণে যুক্ত করা নিশ্চিত করে যে কেও প্রকল্পটি পরীক্ষা করে দেখবে না তার নির্ভরতা অনুপস্থিত থাকবে না। যদি আপনার অনেক নির্ভরতা থাকে তবে একটি ভাগ করা, দূরবর্তী রেপো সম্ভবত একটি ভাল সমাধান, অন্যথায় প্রকল্পের ডিরেক্টরিতে রেপো রাখা পুরোপুরি ঠিক।
অ্যাকোয়ারেল 5'18

2
নোট করুন যে এটি করার জন্য আপনাকে -ডপ্যাকেজিং = জার যুক্ত করার প্রয়োজন হতে পারে। অন্যথায় আপনি "আর্টিক্ট তথ্যটি অসম্পূর্ণ বা অবৈধ: প্যাকেজিং অনুপস্থিত" পেয়েছেন।
জে উডচাক

42

আমি এই জাতীয় সমাধান চাই - maven-install-pluginপোম ফাইলে ব্যবহার করুন:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <version>2.5.2</version>
    <executions>
        <execution>
            <phase>initialize</phase>
            <goals>
                <goal>install-file</goal>
            </goals>
            <configuration>
                <file>lib/yourJar.jar</file>
                <groupId>com.somegroup.id</groupId>
                <artifactId>artefact-id</artifactId>
                <version>x.y.z</version>
                <packaging>jar</packaging>
            </configuration>
        </execution>
    </executions>
</plugin>

এই ক্ষেত্রে আপনি পারফর্ম করতে পারেন mvn initializeএবং জার স্থানীয় মেভেন রেপোতে ইনস্টল করা হবে। এখন এই জারটি এই মেশিনে কোনও মভেন পদক্ষেপের সময় পাওয়া যায় ( <dependency></dependency>ট্যাগের সাথে পোমের ক্ষেত্রে এই নির্ভরতাটিকে অন্য কোনও মেভেন নির্ভরতা হিসাবে অন্তর্ভুক্ত করতে ভুলবেন না )। জার ইনস্টলটি initializeধাপে না জড়িয়ে বাঁধাই সম্ভব , তবে আপনার পছন্দ মতো অন্য কোনও পদক্ষেপ।


2
এটি আমার পক্ষে ভাল কাজ করে, তবে কেবলমাত্র আমি mvn initializeআগে চালিত হলেই mvn package: আমি পারব না mvn initialize packageবা অন্যথায় এটি কেন্দ্রীয় রেপো থেকে জেআর ডাউনলোড করার চেষ্টা করবে। কেন? আমি ভেবেছিলাম এটি এই লক্ষ্যগুলি / পর্যায়ক্রমে চালিত করবে।
ডেভিডএস

1
আসলে, তাদের যথাযথভাবে চালানো উচিত। ডিফল্ট জীবনচক্রের তালিকাটি একবার দেখুন: maven.apache.org/guides/intr پيداوار/… বাঁধাই করতে আপনি অন্য পদক্ষেপটি ব্যবহার করতে পারেন।
স্পিঙ্কস

2
আমি প্রতিটি পদ্ধতি চেষ্টা করেছিলাম, তবে শেষ পর্যন্ত আমাকে এই সমাধানটি অবলম্বন করতে হয়েছিল। মূল কারণটি হ'ল, আমি স্থানীয়ভাবে প্যাকেজগুলি অফলাইন মোডে তৈরি করতে সক্ষম হতে চেয়েছিলাম। যদি আমি এটিকে স্থানীয়ভাবে সংজ্ঞায়িত ভান্ডারগুলির সাথে নির্ভরতা হিসাবে ঘোষণা করি তবে এটিকে সর্বদা কেবল অন্য একটি অনলাইন রেপো হিসাবে বিবেচনা করা হত এবং মাভেন বিল্ডটি শিল্পকর্মটি জরিমানা না করার বিষয়ে অভিযোগ করেছিল। এই সমাধান প্রতিটি ক্ষেত্রেই সূক্ষ্ম কাজ করে।
মৌলি

2
আমি মনে করি পরিষ্কার পর্বটি ব্যবহার করা আরও ভাল কারণ যখন আমরা এমভিএন প্যাকেজটি ব্যবহার করি তখন এটি অযথা শুরু করা হয় initial অবশেষে যদি আমাদের কেবল জার / যুদ্ধ উত্পন্ন করার দরকার হয় আমরা সরাসরি এমভিএন ক্লিন প্যাকেজ ব্যবহার করতে পারি ।
Deoxyseia

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

29
<dependency>
    <groupId>group id name</groupId>
    <artifactId>artifact name</artifactId>
    <version>version number</version>
    <scope>system</scope>
    <systemPath>jar location</systemPath>
</dependency>

6
<scope>systemএখন অবচয় করা হয়েছে।
জেরোল্ডব্রোজার মনিকা

@ জেরোল্ডব্রোজার - ঠিক আছে আমরা এর পরিবর্তে কী ব্যবহার করতে পারি?
মাস্টারজয়ে 2

2
@ মাস্টারজয়ে 2 যেমন স্থানীয় রেপোর কাছে গৃহীত উত্তরেও উল্লিখিত হয়েছে install:install-fileএবং এটিকে "স্বাভাবিক" নির্ভরতা (ডিফল্ট স্কোপ সহ compile) হিসাবে ব্যবহার করুন বা ইন-প্রজেক্ট রিপোজিটরি সমাধান ব্যবহার করুন
জেরোল্ডব্রোসর মনিকে


14

সত্যিই দ্রুত এবং নোংরা উপায় হল একটি স্থানীয় ফাইলের দিকে নির্দেশ করা:

<dependency>
      <groupId>sample</groupId>  
       <artifactId>com.sample</artifactId>  
       <version>1.0</version> 
      <scope>system</scope>
      <systemPath>C:\DEV\myfunnylib\yourJar.jar</systemPath>
</dependency>

তবে এটি কেবল আপনার মেশিনে থাকবে (স্পষ্টতই), এটি ভাগ করে নেওয়ার জন্য সাধারণত একটি যথাযথ এম 2 সংরক্ষণাগার (নেক্সাস / আর্টিফ্যাক্টরি) ব্যবহার করা বা আপনার যদি এর কোনওটি না থাকে বা একটি স্থানীয় মেভেন সেট আপ করতে না চান তা বোঝায় makes কাঠামোগত সংরক্ষণাগার এবং আপনার পোমে একটি "সংগ্রহস্থল" কনফিগার করুন: স্থানীয়:

<repositories>
    <repository>
        <id>my-local-repo</id>
        <url>file://C:/DEV//mymvnrepo</url>
    </repository>
</repositories>

দূরবর্তী:

<repositories>
    <repository>
        <id>my-remote-repo</id>
        <url>http://192.168.0.1/whatever/mavenserver/youwant/repo</url>
    </repository>
</repositories>

এর জন্য ভিত্তিক চলকটি ব্যবহার করে একটি আপেক্ষিক পথ সম্ভব:

<url>file:${basedir}</url>

স্থানীয় সংগ্রহস্থল ইউআরএলগুলির জন্য, তারা কি আপেক্ষিক হতে পারে বা সেগুলি পরম হতে পারে?
ড্রাগস

@ ড্রাগাস আমি চেষ্টা করি নি, দয়া করে আপনি যদি তা করেন তবে আমাদের জানান।
fl0w

1
হ্যাঁ, স্পষ্টতই এর <url>file:${basedir}</url>পরিবর্তে আপনার বেস ইউআরএল হিসাবে ব্যবহার করা দরকার ।
ড্রাগস

11

POM ফাইলে আপনার নিজস্ব স্থানীয় জেআর যুক্ত করুন এবং এটি মেভেন বিল্ডে ব্যবহার করুন।

mvn install:install-file -Dfile=path-to-jar -DgroupId=owngroupid -DartifactId=ownartifactid -Dversion=ownversion -Dpackaging=jar

উদাহরণ স্বরূপ:

mvn install:install-file -Dfile=path-to-jar -DgroupId=com.decompiler -DartifactId=jd-core-java -Dversion=1.2 -Dpackaging=jar

তারপরে এটি এটিকে POM এ যুক্ত করুন:

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


আমি একটি ত্রুটি পেয়েছি নিদর্শন ইনস্টল করতে ব্যর্থ (অ্যাক্সেস অস্বীকার)। আমি কীভাবে এটি সমাধান করতে পারি? @ আরাশিফের
রমজাহ রেহমান 4'17 এ

1
@ রমজাহরহমান কমান্ড প্রম্পটটি অ্যাডমি সুযোগ সুবিধাগুলি দিয়ে ডান ক্লিক করে এবং তারপরে "প্রশাসক হিসাবে চালান" বাছাই করে চেষ্টা করুন
অরস্পিয়ার

9

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

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

http://maven.apache.org/plugins/maven-install-plugin/install-file-mojo.html


4
গ্রেডে স্যুইচিংয়ের সাথে শেষ। এটি কাজ করে না যদি স্থানীয় জারকে নির্ভরতা হিসাবে সংজ্ঞায়িত করা হয়, মাভেন নির্ভরতাগুলি সমাধানের আগে প্লাগইনগুলি চালাবেন না, একটি ম্যানুয়াল ইনস্টলেশন অনিবার্য। : এই পরিস্থিতি সম্পর্কে একটি disscussion পাওয়া stackoverflow.com/questions/5951999/...
xinthink

7

অবশ্যই আপনি এই ফোল্ডারে জার যুক্ত করতে পারেন। তবে সম্ভবত আপনি যা অর্জন করতে চান তা তা করে না ...

আপনার যদি এই জারগুলি সংকলনের জন্য প্রয়োজন হয় তবে এই সম্পর্কিত প্রশ্নটি দেখুন: আমি কি জারগুলি 2 ইনস্টল না করে ক্লাসপাথ তৈরির জন্য যুক্ত করতে পারি?

এছাড়াও, কেউ এটির পরামর্শ দেওয়ার আগে, সিস্টেমের সুযোগটি ব্যবহার করবেন না।


6

আর একটি আকর্ষণীয় বিষয় হ'ল আপনি যখন নিজের প্রকল্পে ব্যক্তিগত বেসরকারী জারগুলি রাখতে চান। ট্রানসিটিভ নির্ভরতা সমাধানের জন্য আপনি মাভেনের সক্ষমতা রাখতে চাইতে পারেন। সমাধান মোটামুটি সহজ।

  1. একটি ফোল্ডার libs তৈরি করুনআপনার প্রকল্পে
  2. আপনার pom.xML ফাইলটিতে নিম্নলিখিত লাইনগুলি যুক্ত করুন

    <properties><local.repository.folder>${pom.basedir}/libs/</local.repository.folder>
    </properties>
    
    <repositories>
       <repository>
            <id>local-maven-repository</id>
            <url>file://${local.repository.folder}</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
       </repository>
    </repositories>
  3. খুলুন .m2 / সংগ্রহস্থল ফোল্ডার এবং আমদানী করার প্রকল্প নির্দেশিকা কাঠামো যদি আপনি চান কপি লিব ফোল্ডার।

যেমন ধরুন আপনি নির্ভরতা আমদানি করতে চান

<dependency>
    <groupId>com.mycompany.myproject</groupId>
    <artifactId>myproject</artifactId>
    <version>1.2.3</version>
</dependency>

শুধু .m2 / সংগ্রহস্থল যান এবং আপনি নীচের ফোল্ডারটি দেখতে পাবেন

কম / mycompany / myproject / 1.2.3

আপনার লিবস ফোল্ডারে সমস্ত কিছু অনুলিপি করুন (আবার, .m2 / সংগ্রহস্থলের অধীন ফোল্ডারগুলি সহ ) এবং আপনার কাজ শেষ হয়েছে।


6

কমান্ড লাইন:

mvn install:install-file -Dfile=c:\kaptcha-{version}.jar -DgroupId=com.google.code
-DartifactId=kaptcha -Dversion={version} -Dpackaging=jar

5

নির্ভরতার গুরুত্বপূর্ণ অংশটি হ'ল: $ om pom.basedir} (কেবলমাত্র $ {ভিত্তিকের পরিবর্তে)

<dependency>
    <groupId>org.example</groupId>
    <artifactId>example</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${pom.basedir}/src/lib/example.jar</systemPath>
</dependency>

4

আমি মনে করি এই সমস্যাটির আরও ভাল সমাধান হ'ল ম্যাভেন-ইনস্টল-প্লাগইন ব্যবহার করা ইনস্টল করার সময় ফাইলগুলি স্বয়ংক্রিয়ভাবে ইনস্টল করতে। এইভাবে আমি আমার প্রকল্পের জন্য এটি সেট আপ করেছি।

প্রথমে একটি সম্পত্তি হিসাবে পাথ (যেখানে আপনি স্থানীয়। জারগুলি সঞ্চয় করেন) যুক্ত করুন।

<properties>
    <local.sdk>/path/to/jar</local.sdk>
</properties>

তারপরে, pluginsসংকলন করার সময় জারগুলি ইনস্টল করতে একটি প্লাগইন যুক্ত করুন।

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <version>2.5.2</version>
    <executions>
        <execution>
            <id>1</id>
            <phase>initialize</phase>
            <goals>
                <goal>install-file</goal>
            </goals>
            <configuration>
                <groupId>com.local.jar</groupId> 
                <artifactId>appengine-api</artifactId>
                <version>1.0</version>
                <packaging>jar</packaging>
                <file>${local.sdk}/lib/impl/appengine-api.jar</file>
            </configuration>
        </execution>
        <execution>
            <id>appengine-api-stubs</id>
            <phase>initialize</phase>
            <goals>
                <goal>install-file</goal>
            </goals>
            <configuration>
                <groupId>com.local.jar</groupId>
                <artifactId>appengine-api-stubs</artifactId>
                <version>1.0</version>
                <packaging>jar</packaging>
                <file>${local.sdk}/lib/impl/appengine-api-stubs.jar</file>
            </configuration>
        </execution>
    </executions>
</plugin>

অবশেষে, নির্ভরতাগুলিতে, আপনি জারগুলি যুক্ত করতে পারেন

<dependency>
    <groupId>com.local.jar</groupId>
    <artifactId>appengine-api</artifactId>
    <version>1.0</version>
</dependency>

<dependency>
    <groupId>com.local.jar</groupId>
    <artifactId>appengine-api-stubs</artifactId>
    <version>1.0</version>
    <scope>test</scope>
</dependency>

আপনার প্রকল্পটি এটির মতো সেট আপ করে, আপনি অন্য কম্পিউটারে নিয়ে যাওয়ার পরেও প্রকল্পটি তৈরি করা অব্যাহত থাকবে (প্রদত্ত যে সম্পত্তিটির দ্বারা নির্দিষ্ট পথে সমস্ত জার ফাইল রয়েছে local.sdk )।

জন্য groupId ব্যবহার একটি অনন্য নাম ঠিক নিশ্চিত কোনও বিবাদ আছে করা।

এখন আপনি mvn installবা mvn testস্থানীয় জারগুলি স্বয়ংক্রিয়ভাবে যুক্ত হবে।


3

পছন্দসই উপায় হ'ল আপনার নিজস্ব দূরবর্তী সংগ্রহস্থান তৈরি করা।

এটি কীভাবে করা যায় তার বিশদ জন্য এখানে দেখুন । ' রিমোট রেপোজিটরিতে আপলোড করা ' বিভাগটি দেখুন।


3

আমি এমন একটি কোড ভাগ করতে চাই যেখানে আপনি জারে পূর্ণ ফোল্ডার আপলোড করতে পারেন। এটি কার্যকর যখন কোনও সরবরাহকারীর সর্বজনীন ভাণ্ডার না থাকে এবং আপনাকে ম্যানুয়ালি প্রচুর গ্রন্থাগার যুক্ত করতে হবে। আমি সরাসরি ম্যাভেনকে কল করার পরিবর্তে একটি .bat তৈরি করার সিদ্ধান্ত নিয়েছি কারণ এটি মেমরির ত্রুটির বাইরে থাকতে পারে। এটি উইন্ডোজের পরিবেশের জন্য প্রস্তুত করা হয়েছিল তবে এটি লিনাক্স ওএসের সাথে মানিয়ে নেওয়া সহজ:

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.jar.Attributes;
import java.util.jar.JarFile;
import java.util.jar.Manifest;

public class CreateMavenRepoApp {

    private static final String OCB_PLUGIN_FOLDER = "C://your_folder_with_jars";

    public static void main(String[] args) throws IOException {

    File directory = new File();
    //get all the files from a directory
    PrintWriter writer = new PrintWriter("update_repo_maven.bat", "UTF-8");
    writer.println("rem "+ new Date());  
    File[] fList = directory.listFiles();
    for (File file : fList){
        if (file.isFile()){               
        String absolutePath = file.getAbsolutePath() ;
        Manifest  m = new JarFile(absolutePath).getManifest();
        Attributes attributes = m.getMainAttributes();
        String symbolicName = attributes.getValue("Bundle-SymbolicName");

        if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject")) {
            String[] parts =symbolicName.split("\\.");
            String artifactId = parts[parts.length-1];
            String groupId = symbolicName.substring(0,symbolicName.length()-artifactId.length()-1);
            String version = attributes.getValue("Bundle-Version");
            String mavenLine= "call mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -Dfile="+ absolutePath+" -DgroupId="+ groupId+" -DartifactId="+ artifactId+" -Dversion="+ version+" -Dpackaging=jar ";
            writer.println(mavenLine);          
        }

        }
    }
    writer.close();
    }

}

কোনও আইডিই থেকে এই মেইনটি চালানোর পরে, আপডেট_রেপো_ম্যাভেন.ব্যাট চালান।


আপনার কোডটি দেখে String symbolicName = attributes.getValue("Bundle-SymbolicName"); if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject"))মনে হচ্ছে যে কেবলমাত্র কাস্টম জারগুলিই সমর্থন করবে। আমাদের যা প্রয়োজন তা নয়: পরিবর্তে তৃতীয় পক্ষের জারের একগুচ্ছ। এইভাবে কোনও জারটি কীভাবে ইনস্টল করবেন আপনার পরামর্শ আছে ?
জাভাদবা

আমি আপনার কোডটি স্থির করেছি: আমি নীচে একটি উত্তর রেখেছি ।
জাভাদবা

3

এটি নতুন সংস্করণগুলির জন্য একটি সংক্ষিপ্ত বাক্য গঠন:

mvn install:install-file -Dfile=<path-to-file>

এটি কার্যকর হয় যখন জেআরটি অ্যাপাচি মাভেন দ্বারা নির্মিত হয়েছিল - সবচেয়ে সাধারণ ক্ষেত্রে। তারপরে এটিতে মেটা-আইএনএফ ডিরেক্টরিটির একটি সাবফোল্ডারে একটি pom.xML থাকবে, যা ডিফল্টরূপে পড়বে read

সূত্র: http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html


2

এছাড়াও একবার দেখুন ...

<scope>compile</scope>

মাভেন নির্ভরতা । এটি ডিফল্ট তবে আমি কিছু ক্ষেত্রে স্পষ্টভাবে সেই সুযোগটি সেট করে খুঁজে পেয়েছি স্থানীয় সংগ্রহশালায় স্থানীয় লাইব্রেরিগুলি খুঁজে পাওয়ার জন্য মাভেনও।


2

কোনও কারণে, ওয়েব অ্যাপ্লিকেশনটিতে আমি রক্ষণাবেক্ষণ দিচ্ছি, আলিরাজা ফাত্তাহির সমাধান বা জেজে রোমানের সমাধান সঠিকভাবে কাজ করে নি worked উভয় ক্ষেত্রেই সংকলনটি ঠিকঠাক হয়ে যায় (এটি জারটি দেখে) তবে প্যাকেজিংটি যুদ্ধের মধ্যে জারটি অন্তর্ভুক্ত করতে ব্যর্থ হয়।

আমি এটির কাজটি চালিয়ে যাওয়ার একমাত্র উপায় /src/main/webapp/WEB-INF/lib/হ'ল পাত্রটি রেখে এবং তারপরে ফাত্তাহিসের বা রোমানের সমাধানের সাথে একত্রিত করে।


1

মনে রাখবেন যে স্থানীয় রেপো ব্যবহার করা কোনও ভাল ধারণা নয়। যদি এই প্রকল্পটি অন্যের সাথে ভাগ করা হয় তবে কাজ না করলে অন্য সবার সমস্যা এবং প্রশ্ন থাকবে এবং আপনার উত্স নিয়ন্ত্রণ সিস্টেমে জারটি উপলব্ধ হবে না!

যদিও ভাগ করা রেপো সর্বোত্তম উত্তর, যদি আপনি কোনও কারণে এটি না করতে পারেন তবে জার এম্বেড করা স্থানীয় রেপোর চেয়ে ভাল। স্থানীয়-কেবল রেপো সামগ্রীগুলি বিশেষত সময়ের সাথে সাথে প্রচুর সমস্যা তৈরি করতে পারে।


1
আপনি যদি সোর্স কন্ট্রোল সিস্টেমে জারগুলি যুক্ত করেন তবে গ্রন্থাগারগুলি সর্বদা উত্সের সাথে একসাথে উপলব্ধ থাকবে। কোন উত্স নেই, গ্রন্থাগার নেই। পরিবর্তে maven সঙ্গে উত্স ঠিক হতে পারে তবে সংগ্রহস্থল অনুপলব্ধ।
sarah.ferguson

@ ফ্র্যাঙ্ক ... বাহ্যিক নির্ভরতা (লাইব্রেরি ফাইল) অন্তর্ভুক্ত না করে কীভাবে এক্সিকিউটেবল জার তৈরি করা যায় সে সম্পর্কে কোনও ধারণা?
সতীশ করুতুরি

মভেনের নতুন কেউ, এবং মূল প্রশ্নের উত্তর খুঁজছেন, "জার এম্বেডিং" এর অর্থ কী?
সিডক

1

আপনার স্থানীয় সংগ্রহস্থলে আপনি আদেশগুলি জারি করে আপনার জারটি ইনস্টল করতে পারেন

 mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \
-DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>

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



1
  1. এমভিএন ইনস্টল করুন

আপনি কমান্ড লাইনে নীচে কোডটি লিখতে পারেন বা যদি আপনি গ্রিপস বিল্টিন মেভেন ব্যবহার করছেন তবে প্রকল্পে ডান ক্লিক করুন -> হিসাবে চালান -> রান করুন কনফিগারেশন ... -> বাম প্যানেলে মাভেন বিল্ড -> নতুন কনফিগারেশন -> এ রাইট ক্লিক করুন লক্ষ্যসমূহ এবং বেস ডিরেক্টরিতে কোড: $ {প্রজেক্ট_লোক: নামঅফফয়রপ্রজেক্ট} -> চালান

mvn install:install-file
   -Dfile=<path-to-file>
   -DgroupId=<group-id>
   -DartifactId=<artifact-id>
   -Dversion=<version>
   -Dpackaging=<packaging>
   -DgeneratePom=true

যেখানে প্রতিটি উল্লেখ করে:

<পাথ টু ফাইল>: ফাইলটি লোড করার পথ যেমন -> সি: \ ক্যাপচা-২.৩.জার

<গ্রুপ-আইডি>: যে গ্রুপটি ফাইলটি যেমন -> com.google.code এর অধীনে নিবন্ধিত হওয়া উচিত

<আর্টিফ্যাক্ট-আইডি>: ফাইলের জন্য শিল্পী নাম যেমন -> কাপ্তচা

<সংস্করণ>: ফাইলটির সংস্করণ যেমন -> 2.3

<প্যাকেজিং>: ফাইলের প্যাকেজিং যেমন -> জার

2. ইনস্টল হওয়ার পরে, কেবল পম.এক্সএমএলে জার ঘোষণা করে।

 <dependency>
      <groupId>com.google.code</groupId>
      <artifactId>kaptcha</artifactId>
      <version>2.3</version>
 </dependency>

1

পদক্ষেপ 1: আপনার maven-install-pluginসাথে লক্ষ্যটি কনফিগার install-fileকরুনpom.xml

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <executions>
        <execution>
            <id>install-external-non-maven-jar-MWS-Client-into-local-maven-repo</id>
            <phase>clean</phase>
            <configuration>
                <repositoryLayout>default</repositoryLayout>
                <groupId>com.amazonservices.mws</groupId>
                <artifactId>mws-client</artifactId>
                <version>1.0</version>
                <file>${project.basedir}/lib/MWSClientJavaRuntime-1.0.jar</file>
                <packaging>jar</packaging>
                <generatePom>true</generatePom>
            </configuration>
            <goals>
                <goal>install-file</goal>
            </goals>
        </execution>
    </executions>
</plugin>

fileআপনার প্রকৃত ফাইল পাথের উপর ভিত্তি করে পাথ সম্পাদনা করার বিষয়টি নিশ্চিত করুন (প্রস্তাবিত হ'ল এই বাহ্যিক অ-মভেন জারগুলি কিছু ফোল্ডারের ভিতরে রাখার পরামর্শ দেওয়া যাক lib, এবং এই libফোল্ডারটিকে আপনার প্রকল্পের ভিতরে রাখুন যাতে প্রকল্প-নির্দিষ্ট আপেক্ষিক পাথ ব্যবহার করা যায় এবং সিস্টেম যুক্ত করা এড়ানো যায়) নির্দিষ্ট পরম পাথ।

আপনার যদি একাধিক বাহ্যিক জার থাকে তবে কেবল <execution>একই জারের মধ্যে অন্যান্য জারগুলির জন্য পুনরাবৃত্তি করুন maven-install-plugin

পদক্ষেপ 2: একবার আপনি maven-install-pluginআপনার pom.xmlফাইলে উপরে বর্ণিত রূপটি কনফিগার করার পরে , আপনার pom.xmlযথারীতি এই জারগুলি ব্যবহার করতে হবে :

    <dependency>
        <groupId>com.amazonservices.mws</groupId>
        <artifactId>mws-client</artifactId>
        <version>1.0</version>
    </dependency>

মনে রাখবেন যে maven-install-pluginকেবলমাত্র আপনার বাহ্যিক জারগুলি আপনার স্থানীয় অনুলিপি করে.m2 জারগুলি মাভেন সংগ্রহস্থলে করে। এটাই. এটি স্বয়ংক্রিয়ভাবে এই জারগুলি আপনার প্রকল্পের মাভেন নির্ভরতা হিসাবে অন্তর্ভুক্ত করে না।

এটি একটি ছোটখাটো বিষয়, তবে কখনও কখনও মিস করা সহজ।


0

আমার pom.xML- র নির্ভরতাগুলির সেটগুলির জন্য আমার একই ত্রুটি ছিল যে পম.এক্সএমএলে নির্ভরতার সংস্করণগুলি নির্দিষ্ট করা হয়নি এবং প্যারেন্ট রিপোজিটরিতে উল্লেখ করা হয়েছিল। কিছু কারণে সংস্করণ বিবরণগুলি এই রেপোর সাথে সিঙ্ক হচ্ছে না। অতএব আমি ট্যাগটি ব্যবহার করে ম্যানুয়ালি সংস্করণগুলিতে প্রবেশ করেছি এবং এটি একটি কবজির মতো কাজ করেছে। পিতামাতার সংস্করণগুলি খুঁজতে এবং এখানে নির্দিষ্ট করার জন্য খুব অল্প সময়ের প্রয়োজন। তবে এটি কেবল জারগুলির জন্য করা যেতে পারে যা আর্টিফ্যাকটিড ত্রুটি দেখায় এবং এটি কাজ করে। আশা করি এটি কাউকে সাহায্য করবে।


0

অ্যাপাচি মাভেন ২.৩.৪ এ আমাকে দ্বিগুণ উদ্ধৃতি যোগ করতে হয়েছিল। দ্বিগুণ উদ্ধৃতি ব্যতীত এটি আমার পক্ষে কাজ করা হয়নি।

উদাহরণ: এমভিএন ইনস্টল: ইনস্টল-ফাইল "-ডফিল = জার ফাইলের জন্য অবস্থান" "-DgroupId = গ্রুপ আইডি" "-ডার্টিফেক্টআইডি = আর্টিফ্যাক্ট আইডি" "-দলান্তর = সংস্করণ" "-ডপ্যাকেজিং = প্যাকেজ টাইপ"


0
  1. একটি স্থানীয় মাভেন সংগ্রহশালা ডিরেক্টরি তৈরি করুন, আপনার প্রকল্পের মূলটি এর সাথে শুরু করার মতো কিছু হওয়া উচিত:
yourproject
+- pom.xml
+- src
  1. গ্রুপ com.example এবং সংস্করণ 1.0 এর জন্য রেপো নামে একটি স্ট্যান্ডার্ড মাভেন সংগ্রহস্থল ডিরেক্টরি যুক্ত করুন:
yourproject
+- pom.xml
+- src
+- repo
  1. রেপোতে আর্টিফ্যাক্ট স্থাপন করুন, মাভেন এমভিএন মোতায়েন ব্যবহার করে আপনার জন্য নিদর্শনটি স্থাপন করতে পারেন: ফাইল-স্থাপন লক্ষ্য:
mvn deploy:deploy-file -Durl=file:///pathtoyour/repo -Dfile=your.jar -DgroupId=your.group.id -DartifactId=yourid -Dpackaging=jar -Dversion=1.0
  1. আপনার জারের সাথে সম্পর্কিত পম ফাইল ইনস্টল করুন যাতে আপনার প্রকল্পটি স্থানীয় রেপো থেকে মাভেন বিল্ড করার সময় জারটি খুঁজে পেতে পারে:
mvn install:install-file -Dfile=/path-to-your-jar-1.0.jar -DpomFile=/path-to-your-pom-1.0.pom
  1. আপনার পোম ফাইলে রেপো যুক্ত করুন:
<repositories>
    <!--other repositories if any-->
    <repository>
        <id>project.local</id>
        <name>project</name>
        <url>file:${project.basedir}/repo</url>
    </repository>
</repositories>
  1. আপনার পোমে নির্ভরতা যুক্ত করুন:
<dependency>
    <groupId>com.groupid</groupId>
    <artifactId>myid</artifactId>
    <version>1.0</version>
</dependency>

-2

এই উত্তরটি কেবলমাত্র ব্যবহারকারীদের জন্য রয়েছে:

আপনি যদি Eclipse ব্যবহার করছেন, জারটি lib / এ রাখুন, জারের নামটিতে ডান ক্লিক করুন এবং "পথ তৈরিতে যুক্ত করুন" এ ক্লিক করুন। গ্রহন একটি "রেফারেন্সযুক্ত গ্রন্থাগার" তৈরি করবে এবং আপনার জন্য জারটি রাখবে

এটি আমার জন্য প্রোগ্রামে এখনই জারের আমদানি সমাধান করেছে


5
এটি একিপ্লাসে প্রবেশ করবে .classpath, তবে mvn packageআপনি যখন সেই নির্ভরতা ব্যবহার শুরু করলেন তখন আপনার pom.xml
খাঁটি বিল্ডটি ব্রোকেট

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