মাভেনকে নির্ভরতাগুলি লক্ষ্য / lib এ অনুলিপি করতে বাধ্য করুন


251

আমি কীভাবে আমার প্রকল্পের রানটাইম নির্ভরতাগুলি target/libফোল্ডারে অনুলিপি করব ?

এখনই নয়, পরে ফোল্ডারের শুধু আমার প্রকল্পের বয়াম কিন্তু রানটাইম নির্ভরতা কেউই ধারণ করে।mvn clean installtarget


আপনার এটার দরকার কেন? আপনার মেভেন প্রকল্পের প্রকারটি কী? জার?
আলেকজান্দ্রে ভিক্টোর

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

2
সমাবেশগুলির সাথে সাবধানতা - আপনার যদি ডিপগুলির মধ্যে প্যাকেজ / ক্লাসগুলি ওভারল্যাপ করে থাকে তবে আপনার সম্ভবত খারাপ সময় হবে।
ডেমানিয়াক

উত্তর:


259

এটি আমার পক্ষে কাজ করে:

<project>
  ...
  <profiles>
    <profile>
      <id>qa</id>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
              <execution>
                <phase>install</phase>
                <goals>
                  <goal>copy-dependencies</goal>
                </goals>
                <configuration>
                  <outputDirectory>${project.build.directory}/lib</outputDirectory>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>

11
আপনি যদি সর্বদা এটি হতে চান তবে <প্রোফাইলে> ... <প্রোফাইলে> মোড়কগুলি সরান এবং <বিল্ড> ট্যাগটি কেবল <প্রকল্প> এর অধীনে করুন
ড্যান হালবার্ট

3
@ জর্জি এটি লব / জারগুলিকে পোষায় না, তবে সংকলিত প্রকল্পের ক্লাসগুলি অন্তর্ভুক্ত করেছে
মিডহাট

5
এটি ঠিক আছে, তবে এটি পরীক্ষার নির্ভরতাও অনুলিপি করছে। আমি নিজের মধ্যে excludeScopeবিকল্পটি যুক্ত করব ( maven.apache.org/plugins/maven-d dependency-plugin/… )।
আলফোনসো নিশিকাওয়া

ভাল কাজ করুন তবে প্রোফাইল ট্যাগগুলির মধ্যে বিল্ড ট্যাগ রাখার প্রয়োজন নেই।
জুলিয়ান BRENELIERE

2
দ্রষ্টব্য: নোডের <excludeScope>test</excludeScope>ভিতরে যায় configuration
জেসি চিশলম

84

আপনি যা করতে চান তার উপর সর্বোত্তম পন্থা নির্ভর করে:

  • আপনি যদি নির্ভরতাগুলি একটি ওয়ার বা ইআর ফাইলে বান্ডিল করতে চান তবে কেবল আপনার প্রকল্পের প্যাকেজিং প্রকারটি EAR বা WAR এ সেট করুন। মাভেন নির্ভরতাগুলি সঠিক জায়গায় বান্ডেল করবে।
  • আপনি যদি কোনও জেআর ফাইল তৈরি করতে চান যা আপনার সমস্ত নির্ভরতার সাথে আপনার কোড অন্তর্ভুক্ত করে, তবে জার-নির্ভর-নির্ভরতা বর্ণনাকারী সহ অ্যাসেম্বলি প্লাগইনটি ব্যবহার করুন । মাভেন আপনার সমস্ত ক্লাস প্লাস কোনও নির্ভরতা থেকে ক্লাস সহ একটি সম্পূর্ণ জেআর ফাইল তৈরি করবে।
  • আপনি যদি কেবল নির্ভরশীলভাবে লক্ষ্য ডিরেক্টরিতে আপনার নির্ভরতা টানতে চান তবে আপনার ফাইলগুলি অনুলিপি করতে নির্ভরতা প্লাগইনটি ব্যবহার করুন ।
  • আপনি যদি অন্য কোনও ধরণের প্রক্রিয়াকরণের জন্য নির্ভরতা টানতে চান তবে আপনাকে সম্ভবত নিজের প্লাগইন তৈরি করতে হবে। নির্ভরতার তালিকা এবং ডিস্কে তাদের অবস্থান পেতে এখানে API রয়েছে। আপনাকে সেখান থেকে নিতে হবে ...

80
mvn install dependency:copy-dependencies 

লক্ষ্য ফোল্ডারে তৈরি নির্ভরতা ডিরেক্টরি নিয়ে আমার জন্য কাজ করে। পছন্দ করি!


35

কটাক্ষপাত ম্যাভেন নির্ভরতা প্লাগইন , বিশেষভাবে, নির্ভরতা: কপি-নির্ভরতা লক্ষ্য । কটাক্ষপাত উদাহরণ শিরোনামের নীচে নির্ভরতা: কপি-নির্ভরতা Mojoআউটপুট ডিরেক্টরি কনফিগারেশন বৈশিষ্ট্যকে $ {ভিত্তিক} / লক্ষ্য / লিবিতে সেট করুন (আমি বিশ্বাস করি, আপনাকে পরীক্ষা করতে হবে)।

আশাকরি এটা সাহায্য করবে.


15
বিকল্পভাবে, আপনি {{ভিত্তিক} / লক্ষ্য / lib এর চেয়ে। {प्रोजेक्ट.ইবিল্ড.ডাইরেক্টরি} / lib ব্যবহার করতে পারেন
কুগা

31

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

সম্পূর্ণ pom উদাহরণ:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>groupId</groupId>
    <artifactId>artifactId</artifactId>
    <version>1.0</version>

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.1.1</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-dependency-plugin</artifactId>
                    <executions>
                        <execution>
                            <phase>process-sources</phase>

                            <goals>
                                <goal>copy-dependencies</goal>
                            </goals>

                            <configuration>
                                <outputDirectory>${targetdirectory}</outputDirectory>
                            </configuration>
                        </execution>
                    </executions>
            </plugin>
        </plugins>
    </build>
</project>

তারপরে দৌড়াও mvn process-sources

জার ফাইলের নির্ভরতা পাওয়া যায় /target/dependency


1
ম্যাভেন-নির্ভরতা-প্লাগইন (লক্ষ্য "অনুলিপি-নির্ভরতা", "আনপ্যাক") এম 2 ই সমর্থন করে না। :-(
প্রধানমন্ত্রী

@ গব্লিনরা $ {টার্গেটডাইরেক্টরি instead এর পরিবর্তে $ {प्रोजेक्ट.বিল্ড.ডাইরেক্টরি} / লিবিব ব্যবহার করে
দিব্যং শাহ

24

আপনি যদি মাঝে মাঝে এই কাজটি করতে চান (এবং এইভাবে আপনার পিওএম পরিবর্তন করতে চান না), এই কমান্ড-লাইনটি ব্যবহার করে দেখুন:

এমভিএন নির্ভরতা: কপি-নির্ভরতা

আপনি যদি সর্বশেষ যুক্তি বাদ দেন তবে নির্ভরতাগুলি স্থাপন করা হয় target/dependencies


ধন্যবাদ! এটি কোনও প্রকল্পের দ্বারা কোথাও কোনও ফোল্ডারে প্রয়োজনীয় লিবগুলি অনুলিপি করার সহজতম উপায় যাতে আপনি প্রয়োজনে অন্য কোথাও অনুলিপি করতে পারেন, উদাহরণস্বরূপ একটি অবিবাহিত ভিত্তিক প্রকল্প। মনে রাখবেন অবশ্যই আপনি পছন্দ করতে চাইলে হার্ডকডযুক্ত ফোল্ডারে পাস করতে পারেন যেমন,mvn dependency:copy-dependencies -DoutputDirectory=./lib
ব্র্যাড পার্কস

আপনি কি এটি pom.xml এর বাইরে করতে পারেন?
গব্লিন্স

24

এরকম কিছু চেষ্টা করুন:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
    <archive>
        <manifest>  
            <addClasspath>true</addClasspath>
            <classpathPrefix>lib/</classpathPrefix>
            <mainClass>MainClass</mainClass>
        </manifest>
    </archive>
    </configuration>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.4</version>
    <executions>
        <execution>
            <id>copy</id>
            <phase>install</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>
                    ${project.build.directory}/lib
                </outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

@Thomas আমি মনেকরি এটা maven clean install, তাহলে আপনি পাবেন libমধ্যেtarget
Searene

1
কেবলমাত্র 1 নির্ভরতা অনুলিপি করতে আমাকে কী করতে হবে?
অ্যালান ডোনিজেট

<classpathPrefix> lib / </classpathPrefix> আমাকে অনেক সাহায্য করেছে। ধন্যবাদ!
মার্টিন পাবস্ট

installপর্বটি process-resourcesএমন জায়গায় প্রতিস্থাপন করবে যাতে buildলক্ষ্যটি রান হওয়ার আগে নির্ভরতাগুলি অনুলিপি করা হয়
ভায়াচ্লাভ কোত্রুট

20

আপনার কেবলমাত্র পম.এক্সএমএল এর মধ্যে নিম্নলিখিত স্নিপেট দরকার build/plugins:

<plugin>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <phase>prepare-package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.build.directory}/lib</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

উপরের packageঅংশটি দৌড়ানোর সময় আপনি দৌড়াবেন

mvn clean package

এবং নির্ভরতাগুলি স্নিপেটে উল্লিখিত আউটপুট ডিরেক্টরিতে অনুলিপি করা হবে, libএই ক্ষেত্রে।

আপনি যদি মাঝে মাঝে এটি করতে চান তবে pom.xML এ কোনও পরিবর্তন প্রয়োজন হবে না। কেবল নিম্নলিখিতটি চালান:

mvn clean package dependency:copy-dependencies

ডিফল্ট অবস্থান, যা ওভাররাইড করতে ${project.build.directory}/dependencies, একটি সিস্টেম সম্পত্তি যোগ নামে outputDirectory, অর্থাৎ

    -DoutputDirectory=${project.build.directory}/lib

7

  • আপনি pom.xML পরিবর্তন করতে চান না
  • আপনি চান না পরীক্ষা পরীক্ষা (যেমন জুনিট.জার) বা সরবরাহিত নির্ভরতা (উদাহরণস্বরূপ wlfullclient.jar)

এখানে আমার জন্য কি কাজ করেছে:

এমভিএন ইনস্টল নির্ভরতা: অনুলিপি

5

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

নিম্নলিখিত কনফিগারেশন (ক উত্পন্ন পথ সব নির্ভরতা বয়াম উল্লেখ সঙ্গে অ্যাপ্লিকেশন প্রবর্তন করা উইন্ডো এবং লিনাক্সের জন্য স্ক্রিপ্ট উত্পন্ন করবে, নীচের লক্ষ্য / appassembler একটি liberal এর সংক্ষিপ্ত রূপ ফোল্ডারের মধ্যে সব নির্ভরতা (ডাউনলোড)। সমাবেশ প্লাগইন তারপর পুরো প্যাকেজ ব্যবহার করা যেতে পারে অ্যাপসেম্বেবল ডিরেক্টরিটি একটি জিপের সাথে ইনস্টল করা / জার সহ ভাণ্ডারগুলিতে স্থাপন করা হয়।

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>appassembler-maven-plugin</artifactId>
    <version>1.0</version>
    <executions>
      <execution>
        <id>generate-jsw-scripts</id>
        <phase>package</phase>
        <goals>
          <goal>generate-daemons</goal>
        </goals>
        <configuration>
          <!--declare the JSW config -->
          <daemons>
            <daemon>
              <id>myApp</id>
              <mainClass>name.seller.rich.MyMainClass</mainClass>
              <commandLineArguments>
                <commandLineArgument>start</commandLineArgument>
              </commandLineArguments>
              <platforms>
                <platform>jsw</platform>
              </platforms>              
            </daemon>
          </daemons>
          <target>${project.build.directory}/appassembler</target>
        </configuration>
      </execution>
      <execution>
        <id>assemble-standalone</id>
        <phase>integration-test</phase>
        <goals>
          <goal>assemble</goal>
        </goals>
        <configuration>
          <programs>
            <program>
              <mainClass>name.seller.rich.MyMainClass</mainClass>
              <!-- the name of the bat/sh files to be generated -->
              <name>mymain</name>
            </program>
          </programs>
          <platforms>
            <platform>windows</platform>
            <platform>unix</platform>
          </platforms>
          <repositoryLayout>flat</repositoryLayout>
          <repositoryName>lib</repositoryName>
        </configuration>
      </execution>
    </executions>
  </plugin>
  <plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2-beta-4</version>
    <executions>
      <execution>
        <phase>integration-test</phase>
        <goals>
          <goal>single</goal>
        </goals>
        <configuration>
          <descriptors>
            <descriptor>src/main/assembly/archive.xml</descriptor>
          </descriptors>
        </configuration>
      </execution>
    </executions>
  </plugin> 

ডাইরেক্টোট্রিটিকে জিপ হিসাবে প্যাকেজ করার জন্য অ্যাসেম্বলি বর্ণনাকারী (এসসিআর / প্রধান / সমাবেশে) হ'ল:

<assembly>
  <id>archive</id>
  <formats>
    <format>zip</format>
  </formats>
  <fileSets>
    <fileSet>
     <directory>${project.build.directory}/appassembler</directory>
     <outputDirectory>/</outputDirectory>
    </fileSet>
  </fileSets>
</assembly>

2

আপনি যদি আপনার প্রকল্পটি যুদ্ধ বা কানের ধরণের মেভেন করেন তবে নির্ভরতাগুলি অনুলিপি করে।



1

ইতিমধ্যে সংক্ষেপে যা বলা হয়েছে তা বানানের জন্য to আমি একটি এক্সিকিউটেবল জেআর ফাইল তৈরি করতে চেয়েছিলাম যা আমার কোডের সাথে আমার নির্ভরতা অন্তর্ভুক্ত করে। এটি আমার পক্ষে কাজ করেছে:

(1) পমটিতে <বিল্ড> <প্লাগইনস> এর অধীনে আমি অন্তর্ভুক্ত করেছি:

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2-beta-5</version>
    <configuration>
        <archive>
            <manifest>
                <mainClass>dk.certifikat.oces2.some.package.MyMainClass</mainClass>
            </manifest>
        </archive>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
</plugin>

(২) এমভিএন কমপাইল অ্যাসেম্বলি চালাচ্ছে: সমাবেশটি প্রকল্পের টার্গেট ডিরেক্টরিতে কাঙ্ক্ষিত মাই-প্রজেক্ট -১.০-এসএনএপিএসএইচটি-জার-নির্ভরতা নিয়ে তৈরি করে jar

(3) আমি জাভা-জার-প্রজেক্ট -১০-এসএনএপশট-জার-নির্ভরতার সাথে জার দিয়ে চালিয়েছি।


প্রধান শ্রেণি পাওয়া যায় নি (3)
টমাস

1

ভারী নির্ভরতা এম্বেড করার জন্য এটি একটি ভারী সমাধান, তবে মাভেনের এসেম্বলি প্লাগইন আমার পক্ষে কৌশলটি কাজ করে।

@ ধনী বিক্রেতার উত্তরটি কার্যকর করা উচিত, যদিও সহজ ক্ষেত্রে আপনার ব্যবহারের গাইড থেকে এই অংশটি নেওয়া দরকার :

<project>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.2.2</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

আপনার কোড উদাহরণটি সমস্যার সমাধান করে না, এটি কেবল সমস্ত একক জেআর মধ্যে বান্ডিল করে। হ্যাঁ, এসেম্বলি প্লাগইনটি এই লক্ষ্যটি অর্জন করতে ব্যবহার করা যেতে পারে তবে এটির মতো নয়।
ডানকান জোন্স

যদিও, আরও পড়ার বিষয়ে, সম্ভবত আপনি এই মন্তব্যটির প্রতিক্রিয়া জানাচ্ছেন ।
ডানকান জোন্স

এত দিন হয়ে গেছে যে আমি সত্যিই মনে করতে পারি না ... প্লাস আমার শেষ ফার্মে লিনাক্স প্রশাসনের দিকে মনোনিবেশ করার পরে আমি বরং মরিচা পেয়েছি - তবে প্রতিক্রিয়াটির জন্য আপনাকে ধন্যবাদ!
রুবিট মঙ্গলবারডোনো

0

যদি আপনার একটিগ্রহে টমক্যাট সার্ভারে চলার সময় নির্ভরতা সম্পর্কিত সমস্যা যদি WEB-INF / lib ফাইলের মধ্যে উপস্থিত না হয় তবে এটি একবার দেখুন:

টমক্যাট চালু করার সময় ক্লাসনটফাউন্ডএক্সপশন ডিসপ্যাচার সার্ভিলেট (মাটেন নির্ভরতা wtpwebapps এ অনুলিপি করা হয়নি)

আপনাকে কেবল প্রোজেক্ট প্রোপার্টি> ডিপ্লোয়মেন্ট অ্যাসেমব্লিতে ম্যাভেন নির্ভরতা যুক্ত করতে হয়েছিল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.