মাভেন: জে 2 ই ই প্রকল্পে রেপগুলিতে পাওয়া যায় না এমন জারগুলি কীভাবে অন্তর্ভুক্ত করবেন?


100

আমার জে 2 ই ই প্রকল্পে আমি বেশ কয়েকটি নির্ভরশীলতা পেয়েছি, যা কোনও ম্যাভেনের সংগ্রহস্থলে পাওয়া যায় না, কারণ তারা মালিকানাধীন গ্রন্থাগার। এই লাইব্রেরিগুলি রানটাইমের সময়ে উপলব্ধ হওয়া দরকার, যাতে / /. / কে টার্গেট করার জন্য অনুলিপি করতে হয় WEB-INF / lib ...

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

সুতরাং মাভেনে তাদেরকে সংহত করার সর্বোত্তম উপায় কোনটি?

দ্রষ্টব্য: আমি আমার নিজস্ব মাভেন সংগ্রহশালা তৈরি করতে চাই না।


7
আমি সত্যিই মনে করি আপনার একটি ম্যাভেন সংগ্রহশালা তৈরির সিদ্ধান্তটি পর্যালোচনা করা উচিত। এটি মোটেই কঠিন নয় এবং এটির জন্য 100% মূল্যবান।
রবার্ট মুন্তানু

7
ম্যাভেন সংগ্রহশালা তৈরির মান পরিস্থিতিগুলির উপর নির্ভর করে।
ইঙ্ক্রাশ

উত্তর:


54

যেমন আপনি বলেছেন যে আপনি নিজের সংগ্রহস্থল স্থাপন করতে চান না, সম্ভবত এটি সাহায্য করবে।

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

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

mvn install:install-file -Dfile=/usr/jars/foo.jar -DpomFile=/usr/jars/foo.pom
mvn install:install-file -Dfile=/usr/jars/bar.jar -DpomFile=/usr/jars/bar.pom

বা শুধু

mvn install:install-file -Dfile=ojdbc14.jar -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0 -Dpackaging=jar

তারপরে আপনি আপনার প্রকল্পের নির্ভরতাগুলি স্বাভাবিক হিসাবে উল্লেখ করতে পারেন।

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


1
ধন্যবাদ এই পদ্ধতিটি এখন আমার জন্য ভাল কাজ করছে। আমি পিওএমটি প্রসারিত করেছি যাতে ফাইলগুলি স্থানীয় রেপটিতে
স্যামসন

সাহায্য করতে পেরে আনন্দিত, তবে অন্যরা যেমন বলেছেন যে ম্যাভেন সংগ্রহস্থল ব্যবস্থাপককে ব্যবহার করা সবচেয়ে ভাল উপায়। এই পদ্ধতির ভাল স্কেল হয় না।
ধনী বিক্রেতা 13

4
যে কমান্ডটি আমার পক্ষে কাজ করেছে: "এমভিএন ইনস্টল: ইনস্টল-ফাইল -ডাফাইল = ক্যাসান্দ্রা-জেডিবিসি-১.১.১.জার -ডগ্রুপআইডি = অর্গা.পাচি-এক্সট্রাস.কাসান্দ্রা-জেডিবিসি-ডার্টিফ্যাক্ট আইডি = ক্যাসান্দ্রা-জেডিবিসি -ড্রভিশন = 1.1.1 -ডপ্যাকেজিং = জার "
মজ্রিক

193

এই সমস্যার দ্রুত সমাধান চাওয়া লোকদের জন্য:

<dependency>
  <groupId>LIB_NAME</groupId>
  <artifactId>LIB_NAME</artifactId>
  <version>1.0.0</version>
  <scope>system</scope>
  <systemPath>${basedir}/WebContent/WEB-INF/lib/YOUR_LIB.jar</systemPath>
</dependency>

কেবল আপনার লাইব্রেরিকে একটি অনন্য গ্রুপআইডিডি এবং শিল্পীকরণের নাম দিন এবং এটি ফাইল সিস্টেমে কোথায় রয়েছে তার দিকে নির্দেশ করুন। তুমি যেতে পারো।

অবশ্যই এটি একটি নোংরা কুইক ফিক্স যা কেবলমাত্র আপনার মেশিনে কাজ করবে এবং যদি আপনি libs এ পথ পরিবর্তন না করেন। তবে কিছু সময় চালানো এবং কয়েকটি পরীক্ষা করার জন্য এটিই আপনি চান।

সম্পাদনা: কেবল প্রশ্নটি পুনরায় লাল করে বুঝেছেন যে ব্যবহারকারী ইতিমধ্যে আমার সমাধানটিকে একটি অস্থায়ী স্থির হিসাবে ব্যবহার করছেন using আমি এই উত্তরটি অন্যদের জন্য দ্রুত সহায়তা হিসাবে আমার উত্তরটি রেখে দেব। কেউ যদি এর সাথে একমত না হন তবে দয়া করে আমাকে একটি মন্তব্য দিন। :)


4
কুল। স্থানীয় মেশিন পাথের পরিবর্তে কোনও URL নির্দিষ্ট করার কোনও উপায় আছে কি?
ফ্রেইকহেড

3
একটি সম্পূর্ণ এবং কাজের উদাহরণের জন্য আপনাকে ধন্যবাদ !!! আমি আশা করি আপনি একটি সোনার মাছ ধরেন এবং এটি আপনাকে তিনটি শুভেচ্ছা দেয়। :)
jhndodo

14
এটি স্ব-অন্তর্ভুক্ত হওয়ায় এটি গ্রহণযোগ্য উত্তর হওয়া উচিত (pom.xML এ)
বিক্রম

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

1
২০১ 2016 সালের হিসাবে এটি কাজ করছে বলে মনে হচ্ছে না। বিল্ডটি পথটিকে স্বীকার করে তবে শেডযুক্ত জারে কোডটি অন্তর্ভুক্ত করে না। ইঁদুর ...
মার্কথেগ্রিয়া

24

আপনার প্রকল্পের অধীনে একটি সংগ্রহস্থল ফোল্ডার তৈরি করুন। চলুন

${project.basedir}/src/main/resources/repo

তারপরে, এই রেপোতে আপনার কাস্টম জারটি ইনস্টল করুন:

mvn install:install-file -Dfile=[FILE_PATH] \
-DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] \ 
-Dpackaging=jar -DlocalRepositoryPath=[REPO_DIR]

পরিশেষে, pom.xml প্রকল্পগুলিতে নিম্নলিখিত রেপো এবং নির্ভরতার সংজ্ঞা যুক্ত করুন:

<repositories>
    <repository>
        <id>project-repo</id>
        <url>file://${project.basedir}/src/main/resources/repo</url>
    </repository>
</repositories>

<dependencies>    
    <dependency>
        <groupId>[GROUP]</groupId>
        <artifactId>[ARTIFACT]</artifactId>
        <version>[VERS]</version>
    </dependency>
</dependencies>

1
এটি আমার পক্ষে খুব ভাল কাজ করেছে। পিএস আমি স্থানীয় রেপোর জন্য আলাদা ডিরেক্টরি প্রস্তাব করব কারণ "
এসসিআর

1
এটি একটি মোহন মত কাজ করে। আমি এন্টি থেকে মাভেনে একটি পুরানো প্রকল্প স্থানান্তরিত করছি এবং কয়েকটি লিব আমি ওয়েব রেপোতে খুঁজে পাচ্ছি না।
পাওলো

সতর্কতা: যখন -DococalRepositoryPath এর মান শেষ হয় না /(অর্থাত্, একটি ফোল্ডার নির্দেশ করে), তখন তাকে রেপো গ্রুপআইড দিয়ে তৈরি করা হয়। উদাহরণস্বরূপ: যদি গ্রুপ আইডি হয় foo.comএবং স্থানীয় রেপোসিটোরিপথ হয় repo, তবে রেপো ফোল্ডারটি হয়ে যায় repo.foo.com
শেশেদ্রী মান্থ

এই পদ্ধতিটি স্থানীয়ভাবে জাভা প্রকল্প এবং ফাইল সিস্টেমের জন্য ব্যবহৃত মাভেন বিল্ড অটোমেশন সরঞ্জাম ব্যবহার করে সিস্টেম সংগ্রহস্থল থেকে স্থানীয় স্থানীয় প্রকল্প হিসাবে।
ওলেকসেই ক্যাস্লিয়েটসিন

8

আপনাকে একটি স্থানীয় সংগ্রহস্থল স্থাপন করতে হবে যা এই জাতীয় লাইব্রেরি হোস্ট করবে। বেশ কয়েকটি প্রকল্প রয়েছে যা হুবহু এটি করে। উদাহরণস্বরূপ কারুশিল্প


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

3

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

এসসিআর / প্রধান / সংস্থানসমূহ / লিবের অধীনে জারগুলি অনুলিপি করুন (lib ফোল্ডার তৈরি করুন)। এগুলি আপনার প্রকল্পের অংশ হবে এবং পুরোপুরি ডিপ্লোয়মেন্ট সার্ভারে যাবে। ডিপ্লোয়মেন্ট সার্ভারে, নিশ্চিত করুন যে আপনার স্টার্টআপ স্ক্রিপ্টগুলিতে ক্লাসপথে src / main / উত্স / lib / * রয়েছে। ভায়োলা।


2

আপনি এগুলি একটি ব্যক্তিগত, স্থানীয় সংগ্রহস্থলে ইনস্টল করতে পারেন (যেমন। হোম 2 ডিরেক্টরিতে এম 2 / সংগ্রহস্থল): আরও বিশদ এখানে


7
হ্যাঁ আমি এটি করতে পারতাম, তবে তারপরে আমাকে যে প্রকল্পটি তৈরি করতে চায় তাদের প্রত্যেককে বলতে হবে যে তাকে এক্স, ওয়াই ফাইল ডিরেক্টরি জেডে রাখতে হবে এবং এটি সত্যই জটিল করে তোলে। সর্বোপরি আমি বিল্ড প্রক্রিয়াটি সহজ করার জন্য ম্যাভেনকে ব্যবহার করতে চাই।
স্যামসন

2

যদি আমি ভালভাবে বুঝতে পারি, আপনি যা করতে চান তা যদি সংকলন পর্বের সময় নির্ভরতা রফতানি করতে হয় তবে প্রতিটি প্রয়োজনীয় লাইব্রেরি ম্যানুয়ালি পুনরুদ্ধার করার প্রয়োজন হবে না, আপনি মোজো অনুলিপি-নির্ভরতা ব্যবহার করতে পারেন ।

আশা করি এটি আপনার ক্ষেত্রে কার্যকর হতে পারে ( উদাহরণসমূহ )


2

@ রিক জাফির সমাধানটি আমার পক্ষে কাজ করেছে।

আমি ঠিক এটিই খুঁজছিলাম। গবেষণা পরীক্ষার কোডের জন্য এটির মাধ্যমে এগিয়ে যাওয়ার এক উপায়। অভিনব কিছু না। হ্যাঁ আমি জানি যে তারা সকলেই যা বলেছিল :) বিভিন্ন উত্সাহিত প্লাগইন সমাধানগুলি আমার উদ্দেশ্যগুলির জন্য ওভারকিল বলে মনে হচ্ছে। আমার কাছে এমন কিছু জার রয়েছে যা পোম ফাইলের সাহায্যে আমাকে তৃতীয় পক্ষের libs হিসাবে দেওয়া হয়েছিল। আমি এটি দ্রুত সংকলন / চালানো চাই। এই সমাধানটি যা আমি তুচ্ছভাবে অজগরকে খাপ খাইয়েছিলাম তা আমার জন্য বিস্ময়কর কাজ করেছে। আমার পোমে কেটে পেস্ট করুন। এই কাজের জন্য পাইথন / পার্ল কোড এই প্রশ্নোত্তরে রয়েছে: আমি কি জারগুলি 2 ইনস্টল না করে ক্লাসপাথ তৈরির জন্য যুক্ত করতে পারি?

def AddJars(jarList):
  s1 = ''
  for elem in jarList:
   s1+= """
     <dependency>
        <groupId>local.dummy</groupId>
        <artifactId>%s</artifactId>
        <version>0.0.1</version>
        <scope>system</scope>
        <systemPath>${project.basedir}/manual_jars/%s</systemPath>
     </dependency>\n"""%(elem, elem)
  return s1

Xx.jar এর জন্য উপরের সমাধান 'depend depend.d dependency.systemPath' প্রদান করে প্রকল্প ডিরেক্টরিতে ফাইলগুলি নির্দেশ করা উচিত নয়। দেখুন stackoverflow.com/questions/10935135/...
sarah.ferguson


1

ইনস্টল একা আমার জন্য কাজ করে নি।

mvn deploy:deploy-file -Durl=file:///home/me/project/lib/ \
  -Dfile=target/jzmq-2.1.3-SNAPSHOT.jar -DgroupId=org.zeromq \  
  -DartifactId=zeromq -Dpackaging=jar -Dversion=2.1.3
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.