ম্যাভেন একাধিক এসসিআর ডিরেক্টরি সহ সংকলন করে


194

একক মাভেন প্রকল্পে একাধিক জাভা উত্স ডিরেক্টরি সংকলন করার কোনও উপায় আছে কি?

উত্তর:


278

আপনি বিল্ড-সহায়ক সহ একটি নতুন উত্স ডিরেক্টরি যুক্ত করতে পারেন:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>add-source</goal>
                    </goals>
                    <configuration>
                        <sources>
                            <source>src/main/generated</source>
                        </sources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

2
এই পদ্ধতির সাথে একমাত্র সমস্যাটি হ'ল চূড়ান্ত নিদর্শনগুলিতে জাভা উত্স ফাইলগুলিও (। জাভা ফাইল) অন্তর্ভুক্ত রয়েছে। উত্স ফাইলগুলি বাদ দেওয়ার এবং কেবলমাত্র .class ফাইলগুলি অন্তর্ভুক্ত করার কোনও উপায় আছে?
সরভানা_পিসি

17
অন্যের জন্য কেবল একটি নোট (আমার মতো), pluginউপাদানটি রয়েছে /project/build/pluginsএবং এতে নেই/project/build/pluginManagement/plugins
বেটলিস্টা

3
আপনি যদি m2e connector for build-helper-maven-pluginগ্রিপস ব্যবহার করছেন তবে আপনি পলম এক্সএমএল
তে

1
আপনি যদি কোনও সতর্কতা পান তবে আপনাকে ট্যাগটির 'build.plugins.plugin.version' for org.codehaus.mojo:build-helper-maven-plugin is missingমধ্যে যুক্ত করতে হবে<plugin><version>1.12</version>
আলফায়া

4
তাই 2017 এর সেরা উপায়টি ছিল এক্সএমএল পাস্তা তৈরি করা। কেউ কি তাতে সমস্যা দেখছেন না?
টম

55

আমি নির্বাকভাবে এইভাবে এটি:

<build>
  <finalName>osmwse</finalName>
  <sourceDirectory>src/main/java, src/interfaces, src/services</sourceDirectory>
</build>

2
আমার জন্য কাজ করেছেন :) গ্রহন যদিও এটি পছন্দ করবে বলে মনে হচ্ছে না। মনে হয় "এসসিআর / প্রধান / জাভা, এসসিআর / ইন্টারফেসস" একটি একক সিআরসি, এবং তাই এটি (নিখোঁজ) হিসাবে ফ্ল্যাগ করে।
জোয়েল

1
আমার জন্য, এটি ম্যাভেন ৩.২.২ এর কারণে কোনও উত্স খুঁজে না পেয়েছিল।
ব্যবহারকারী 149408

40

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

<build>
    <sourceDirectory>.</sourceDirectory>
    <plugins>
        <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
        <includes>
            <include>src/main/java/**/*.java</include>
            <include>src/main2/java/**/*.java</include>
        </includes>
        </configuration>
        </plugin>
    </plugins>
</build>

18
এমন কোনও ভাল ধারণা আইএমএইচও নয়, যেহেতু বেশ কয়েকটি প্লাগইন উত্স ফাইলগুলির শিকড় হিসাবে sourceDirectory- এবং সম্ভবত অতিরিক্ত sourcesহিসাবে ধরে নেয় । আপনার সমাধানে maven-compiler-pluginএই প্রকৃত শিকড় সম্পর্কে সচেতন একমাত্র প্লাগইন।
লরেন্ট পাইরেইন

3
@ লরেন্ট আপনি ঠিক সে সম্পর্কেই বলেছেন। কয়েক বছর আগে এটি একটি ভাল ধারণা ছিল তবে এখন আরও অনেক ভাল বিকল্প রয়েছে। উপরে তালিকাভুক্ত বিল্ড-সহায়ক আমার পছন্দসই বিকল্পগুলি।
সাল

5
এটি প্রকল্পের মডেলে এটি যুক্ত করে না, সুতরাং এটি আইডিইগুলিতে সঠিকভাবে কাজ করবে না।
ডেভিড ফিলিপস

+1 @sal এটি ওয়ার প্রকল্পের নির্ভরতার সাথে কবজির মতো কাজ করেছে।
এটোরাস

1
আমি কোনও বাহ্যিক উত্স ডিরেক্টরি অন্তর্ভুক্ত করতে চাইলে এটি কাজ করতে পারে না (জাভা ক্লাস যা আমি আমার মাভেন প্রকল্পে ব্যবহার করছি)। আমার বাহ্যিক উত্সটি যদি আমার গ্রহের কর্মক্ষেত্রের বাইরে অবস্থান করে তবে কী হবে? আমি কি করতে পারি?
অ্যারোক্স

16

এটি ইন্টেলিজজে কাজ করার জন্য, আপনি যুক্ত করতে পারেন

<generatedSourcesDirectory>src/main/generated</generatedSourcesDirectory>

maven- সংকলক-প্লাগইন


এটি যুক্ত করতে চাই যে এটি প্রকল্পের কনফিগারেশনে উত্স উত্স হিসাবে উত্পন্ন উত্সগুলি যুক্ত করার পাশাপাশি গ্রহপথে কাজ করেছে।
অ্যাডাম হকস

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

2
যেখানে আপনি এটি করা ?
পাভেল নিডোবা

10

এটি সম্পদ ট্যাগ সংজ্ঞায়িত করে ম্যাভেনের সাথেও কাজ করে। আপনি নিজের সিআরসি ফোল্ডারের নামগুলি নিজের পছন্দ অনুযায়ী নাম রাখতে পারেন।

    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.java</include>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
        </resource>

        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.java</include>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
        </resource>

        <resource>
            <directory>src/main/generated</directory>
            <includes>
                <include>**/*.java</include>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
        </resource>
    </resources>

8
maven.apache.org/pom.html# সম্পদ ->Resources are not (usually) code. They are not compiled
এসজুয়ান 76

4

এটি maven 3.5.4 এর সাথে কাজ করেছে এবং এখন ইন্টেলিজ আইডিয়া এই কোডটি উত্স হিসাবে দেখুন:

       <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
            <configuration>
                <generatedSourcesDirectory>src/main/generated</generatedSourcesDirectory>                    
            </configuration>
        </plugin>

2

পোস্ট থেকে বিল্ড-সহায়ক-মাভেন-প্লাগইন ব্যবহার করুন - এবং এসআরসি / মেইন / উত্পন্ন আপডেট করুন update এবং এমভিএন ক্লিন কম্পাইল আমার ../common/src/main/java, বা ../common এ কাজ করে, সুতরাং পরবর্তীটি রেখে দেওয়া। তাহলে হ্যাঁ, ডেভিড ফিলিপস উল্লিখিত হিসাবে সংকলনের IntelliJ IDEA (10.5.2) স্তরের স্তরের ব্যর্থতা নিশ্চিত করে। বিষয়টি হ'ল আইডিইএ প্রকল্পটিতে অন্য উত্সের মূল যোগ করে নি। এটি ম্যানুয়ালি যোগ করা সমস্যার সমাধান করেছে। প্রকল্পের কোনও কিছু সম্পাদনা মেন থেকে আসা উচিত এবং আইডিইএর প্রকল্প বিকল্পগুলির সরাসরি সম্পাদনা থেকে নয় nice তবুও আমি যতক্ষণ না তারা বিল্ড-হেল্পার-মভেন-প্লাগইনকে সরাসরি এমনভাবে সমর্থন করে যে এটি উত্সগুলিকে স্বয়ংক্রিয়ভাবে যুক্ত করবে ততক্ষণ আমি এর সাথে বেঁচে থাকতে সক্ষম হব।

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

  • নির্বাচন করুন - প্রকল্প সেটিংস / মাভেন / আমদানি / সোর্স এবং টেস্ট ফোল্ডারগুলিকে পুনরায় আমদানিতে রাখুন।
  • যোগ করুন - প্রকল্পের কাঠামো / প্রকল্প সেটিংস / মডিউল / {মডিউল} / উত্স / সামগ্রী রুট যুক্ত করুন।

এখন এই ফোল্ডারগুলিকে আমদানিতে রাখাই পৃথিবীর সেরা অনুশীলন নয়, ..., কিন্তু চেষ্টা করে দেখুন।


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

বহু বছর ধরে ইন্টেলিজে রয়েছেন। এবং কখনই গ্রহণে সরে যায় না, সুতরাং এটির জন্য কথা বলতে পারে না, তবে এটি শুনে সাধারণত খুব ভাল। ইন্টেলিজিজের জন্য প্রতিবছর একটি ব্যক্তিগত লাইসেন্স আপগ্রেড করা হয় $ 100 / বছরে। নতুন প্রধান সংস্করণগুলি প্রতিবছর জানুয়ারীতে প্রকাশিত হয়। তারপরে পূর্ববর্তী বছরের শেষ 2-3 মাসে তারা আপনাকে পূর্ববর্তী সংস্করণটি কিনতে এবং আসন্নটিতে বিনামূল্যে আপগ্রেড দেওয়ার অনুমতি দিচ্ছে। এটি এখনই তাই 10 কিনে 11 পাওয়ার সময় "নিরাপদ" সময় Also এছাড়াও আপনার যদি জেএসপি এবং অন্যান্য এন্টারপ্রাইজ বৈশিষ্ট্যগুলির প্রয়োজন না হয় তবে বিনামূল্যে সম্প্রদায় সংস্করণ ব্যবহার করুন।
arntg

2

যদিও এভোককের উত্তরটি মূলত সঠিক, এটি পরীক্ষার ক্লাসগুলি অনুপস্থিত । আপনাকে লক্ষ্য অ্যাড-টেস্ট-উত্স সহ পরীক্ষার ক্লাস যুক্ত করতে হবে :

                        <execution>
                            <phase>generate-sources</phase>
                            <goals>
                                <goal>add-test-source</goal>
                            </goals>
                            <configuration>
                                <sources>
                                    <source>target/generated/some-test-classes</source>
                                </sources>
                            </configuration>
                        </execution>

1

এটি দুটি ধাপে করা যেতে পারে:

  • প্রতিটি উত্স ডিরেক্টরিতে আপনার নিজস্ব মডিউল তৈরি করা উচিত।
  • সমস্ত মডিউলগুলিতে আপনাকে একই বিল্ড ডিরেক্টরিটি নির্দিষ্ট করা উচিত: ${build.directory}

যদি আপনি শুরু জেটি ( jetty:run) দিয়ে কাজ করেন , তবে কোনও মডিউলের কোনও ক্লাসের পুনঃসংশোধন (মাভেন, আইডিইএ বা একটিলিপ্স সহ) জেটির পুনঃসূচনা হতে পারে। একই আচরণ আপনি সংশোধিত সংস্থানগুলির জন্য পাবেন।


1

কনফিগারেশনে, আপনি ব্যবহার করতে পারেন <compileSourceRoots>

oal:          org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-cli)
[DEBUG] Style:         Regular
[DEBUG] Configuration: <?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <basedir default-value="${basedir}"/>
  <buildDirectory default-value="${project.build.directory}"/>
  <compilePath default-value="${project.compileClasspathElements}"/>
  <compileSourceRoots default-value="${project.compileSourceRoots}"/>
  <compilerId default-value="javac">${maven.compiler.compilerId}</compilerId>
  <compilerReuseStrategy default-value="${reuseCreated}">${maven.compiler.compilerReuseStrategy}</compilerReuseStrategy>
  <compilerVersion>${maven.compiler.compilerVersion}</compilerVersion>
  <debug default-value="true">${maven.compiler.debug}</debug>
  <debuglevel>${maven.compiler.debuglevel}</debuglevel>
  <encoding default-value="${project.build.sourceEncoding}">${encoding}</encoding>
  <executable>${maven.compiler.executable}</executable>
  <failOnError default-value="true">${maven.compiler.failOnError}</failOnError>
  <failOnWarning default-value="false">${maven.compiler.failOnWarning}</failOnWarning>
  <forceJavacCompilerUse default-value="false">${maven.compiler.forceJavacCompilerUse}</forceJavacCompilerUse>
  <fork default-value="false">${maven.compiler.fork}</fork>
  <generatedSourcesDirectory default-value="${project.build.directory}/generated-sources/annotations"/>
  <maxmem>${maven.compiler.maxmem}</maxmem>
  <meminitial>${maven.compiler.meminitial}</meminitial>
  <mojoExecution default-value="${mojoExecution}"/>
  <optimize default-value="false">${maven.compiler.optimize}</optimize>
  <outputDirectory default-value="${project.build.outputDirectory}"/>
  <parameters default-value="false">${maven.compiler.parameters}</parameters>
  <project default-value="${project}"/>
  <projectArtifact default-value="${project.artifact}"/>
  <release>${maven.compiler.release}</release>
  <session default-value="${session}"/>
  <showDeprecation default-value="false">${maven.compiler.showDeprecation}</showDeprecation>
  <showWarnings default-value="false">${maven.compiler.showWarnings}</showWarnings>
  <skipMain>${maven.main.skip}</skipMain>
  <skipMultiThreadWarning default-value="false">${maven.compiler.skipMultiThreadWarning}</skipMultiThreadWarning>
  <source default-value="1.6">${maven.compiler.source}</source>
  <staleMillis default-value="0">${lastModGranularityMs}</staleMillis>
  <target default-value="1.6">${maven.compiler.target}</target>
  <useIncrementalCompilation default-value="true">${maven.compiler.useIncrementalCompilation}</useIncrementalCompilation>
  <verbose default-value="false">${maven.compiler.verbose}</verbose>
</configuration>

এগুলি সংকলক প্লাগইনটির 3.8.1 সংস্করণের জন্য উপলব্ধ সমস্ত কনফিগারেশন। বিভিন্ন সংস্করণে বিভিন্ন কনফিগারেশন রয়েছে যা -Xসাধারণ এমভিএন কমান্ডের পরে আপনার কোডটি চালিয়ে আপনি খুঁজে পেতে পারেন । মত

mvn clean install -X
mvn compiler:compile -X

এবং আইডি বা লক্ষ্য বা প্লাগইন নাম দিয়ে অনুসন্ধান করুন এটি অন্যান্য প্লাগিনগুলির সাথেও সহায়তা করতে পারে। Eclipse, IntelliJ পরামর্শ হিসাবে সমস্ত কনফিগারেশন না দেখায়।

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