मावेन के निर्माण और निर्माण जार में शामिल करने के लिए एक अतिरिक्त स्रोत निर्देशिका कैसे जोड़ें?


95

Src / main / java के अलावा, मैं एक src / बूटस्ट्रैप डायरेक्टरी जोड़ रहा हूं जिसे मैं अपनी बिल्ड प्रोसेस में शामिल करना चाहता हूं, दूसरे शब्दों में, मैं चाहता हूं कि maven को कंप्लीट करूं और अपने बिल्ड में वहां के सोर्स शामिल करूं। किस तरह!?


सरल प्रश्न: स्रोत कोड को src / main / java में क्यों नहीं ले जाना चाहिए? या एक अलग मावेन प्रोजेक्ट / मॉड्यूल बनाएं जिसमें कोड शामिल हो और इसे निर्भरता के रूप में परिभाषित करें।
— खमरबाईस

7
मेरे मामले में मुझे एक उत्पन्न स्रोत फ़ोल्डर जोड़ना होगा, जिसे मैं लक्ष्य के अंदर रहना पसंद करता हूं।
— डीजे जेक

वैकल्पिक रूप से, एक निर्देशिका के अलावा एकीकरण-परीक्षण को यहाँsrc/{main,test}/ बताए गए स्थान पर रखना चाह सकते हैं
— y2k-shubham

इस पर भी यहां चर्चा की गई है: stackoverflow.com/q/270445/1061929
— bjmi

जवाबों:


144

आप बिल्ड हेल्पर प्लगिन का उपयोग कर सकते हैं , जैसे:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>1.7</version>
        <executions>
          <execution>
            <id>add-source</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>add-source</goal>
            </goals>
            <configuration>
              <sources>
                <source>some directory</source>
                ...
              </sources>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

1
क्या वास्तव में ग्रहण ऐसे फ़ोल्डर को किसी के buildpathलिए भी पहचानता है? क्योंकि यह मेरे लिए नहीं है। एफडब्ल्यूआईडब्ल्यू, मैं m2eपरियोजना को आयात करने के लिए उपयोग करता हूं ।
— १३

महान जवाब, बस स्पष्ट करने के लिए, आपको ऊपर से लाइनों के साथ अपने मावेन-कंपाइलर-प्लगइन को बदलना चाहिए ...
— कॉलिन

इंटेलीज में भी काम करता है।
— अलेक्जेंडर क्लिमेत्स्क ने

1
ग्रहण ने मुझे m2e के लिए एक प्लगइन स्थापित करने के लिए कहा, बिल्ड हेल्पर कनेक्टर। मैंने किया था, और जीवनचक्र त्रुटि हो गया है।
— एलेक्सिस डफ्रेनॉय

1
Plugin execution not covered by lifecycle configuration: org.codehaus.mojo:build-helper-maven-plugin:1.7:add-source (execution: add-source, phase: generate-sources)यह त्रुटि हो रही है
— केटी

35
नोट: यह समाधान सिर्फ जावा स्रोत फ़ाइलों को लक्ष्य / कक्षाओं निर्देशिका में ले जाएगा और स्रोतों को संकलित नहीं करेगा।

अद्यतन के pom.xmlरूप में -

<project>   
 ....
    <build>
      <resources>
        <resource>
          <directory>src/main/config</directory>
        </resource>
      </resources>
     ...
    </build>
...
</project>

2
NetBeans ने इसे एक आकर्षण की तरह उठाया :)
— Attila

1
लगता है कि आपको ग्रहण बिल्ड पथ पर जोड़े गए फ़ोल्डर के लिए ** बहिष्करण को हटाने की आवश्यकता है :(
— डॉर्मोज़

@ डॉमहाउस क्या आप कृपया समझा सकते हैं?
— साकेत

1
IntelliJ के साथ काम नहीं करता है, यह <resource>"संसाधन" फ़ोल्डर के रूप में दिखाई देगा, लेकिन "स्रोत" फ़ोल्डर के रूप में नहीं, उदाहरण के लिए यह उनके अंदर जावा स्रोत फ़ाइलों को संकलित नहीं करेगा।
— अलेक्जेंडर क्लिमेत्स्क

4
यह समाधान सिर्फ जावा स्रोत फ़ाइलों को लक्ष्य / कक्षाओं निर्देशिका में ले जाएगा और स्रोतों को संकलित नहीं करेगा
— स्टीफन हैबर

12

7
यह डिफ़ॉल्ट src / main / java डायरेक्टरी को ओवरराइड करता है। यदि आप कई निर्देशिकाएँ चाहते हैं, तो आपको डिफ़ॉल्ट को भी निर्दिष्ट करना होगा।
— नैटिक्स

2
सवाल यह है कि एकाधिक स्रोत निर्देशिकाओं को कैसे जोड़ा जाए और आप केवल एक स्रोत निर्देशिका को जोड़ने के लिए एक विधि का प्रस्ताव कर रहे हैं, जो कि पूछे जाने के विपरीत है।
— जोआओ माटोस

1

हाल के मावेन संस्करणों (3) और मावेन कंपाइलर प्लगइन (3.7.0) के हालिया संस्करण के साथ, मैं नोटिस करता हूं कि स्रोत के साथ एक स्रोत फ़ोल्डर को जोड़ना build-helper-maven-pluginआवश्यक नहीं है यदि फ़ोल्डर जिसमें स्रोत कोड को जोड़ने के लिए बिल्ड में स्थित है। targetफ़ोल्डर या उसका एक सबफ़ोल्डर।
ऐसा लगता है कि संकलक मावेन प्लगइन इस फ़ोल्डर के अंदर स्थित किसी भी जावा स्रोत कोड को संकलित करता है जो भी निर्देशिका जिसमें वे शामिल हैं।
उदाहरण के लिए कुछ (उत्पन्न या नहीं) स्रोत कोड में target/a, target/generated-source/fooसंकलित किया जाएगा और आउटपुटडायरेक्टरी में जोड़ा जाएगा target/classes:।


-1

आप अपनी निर्माण प्रक्रिया के लिए निर्देशिका जोड़ सकते हैं जैसे:

    ...
   <resources>
     <resource>
       <directory>src/bootstrap</directory>
     </resource>
   </resources>
   ...

Src / main / java डिफ़ॉल्ट पथ है जिसका pom.xml में उल्लेख करने की आवश्यकता नहीं है


2
लोगों को नीचा क्यों दिखाता है? मूल रूप से saiky0 (जो upvotes है) के रूप में एक ही जवाब है, लेकिन पहले?
— फ्रिसो

15
@ फ़्रीओ क्योंकि यह सही नहीं है। संसाधन निर्देशिका जोड़ने से संसाधन जुड़ जाएंगे (कॉपी की गई फ़ाइलें target/classes, लेकिन संकलित नहीं)। इस प्रश्न का एक स्रोत निर्देशिका है, जो फ़ाइलों को किया जाएगा रखती जोड़ने के बारे में है संकलित में target/classes, नहीं की नकल की।
— डार्थ एंड्रॉइड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.