2009-09-08 7 views
15

मुझे मैवेन पसंद है। मुझे यह भी बहुत पसंद है। चूंकि मैंने इसे एंटी से स्विच किया है, इसलिए मैंने कई घंटे के कामों को सहेज लिया है, बिल्ड फाइलों का निर्माण किया है, निर्भरताओं को प्रशासित किया है, आदि, और मेरे स्रोत नियंत्रण भंडार में बहुत सी जगह बचाई है।मेवेन pom.xml फ़ाइलों (या: एक प्रशंसक द्वारा मेवेन की आलोचना) की क्रिया को कम करना

समस्या यह है कि मैवेन फाइलें भी वर्बोज़ हैं। नहीं कि चींटी वर्कोज़ जहां चींटी वर्बोज़, लेकिन उनकी वर्बोजिटी उनके काम के लिए उपयुक्त थी।

उदाहरण के लिए, बजाय लेखन की:

<dependencies> 
<dependency> 
    <groupId>commons-logging</groupId> 
    <artifactId>commons-logging</artifactId> 
    <version>1.1.1</version> 
<dependency> 
    <groupId>com.myosproject</groupId> 
    <artifactId>superlibrary</artifactId> 
    <version>7.5</version> 
</dependency> 
<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>3.8.1</version> 
    <scope>test</scope> 
    </dependency> 
</dependencies> 

मैं चाहते हैं

<dependencies> 
    commons-logging/commons-logging/1.1.1 
    com.myosproject/superlibrary/7.5 
    test:junit/junit/3.8.1 
</dependencies> 

या

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.5</source> 
        <target>1.5</target> 
       </configuration> 
     </plugin> 
    </plugins> 
के बजाय की तरह कुछ लिखने

मैं

<build version="1.5"/> 

और चाहते हैं (पिछले उदाहरण और हम किया जाता है), बजाय लिखने की:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>native2ascii-maven-plugin</artifactId> 
    <executions> 
     <execution> 
      <goals> 
       <goal>native2ascii</goal> 
      </goals> 
      <configuration> 
      <encoding>UTF8</encoding> 
       </configuration> 
     </execution> 
    </executions> 
</plugin> 

मैं चाहते हैं कुछ भी नहीं लिखने के लिए नहीं । यानी, maven देशी2ascii फ़ोल्डर की उपस्थिति का पता लगाएगा और डिफ़ॉल्ट रूप से सही करेगा।

मुझे पता है कि मैं प्लगइन और अन्य चीजों के साथ अंतर्निहित कार्यक्षमता को मिला रहा हूं, लेकिन कृपया एक मेवेन उपयोगकर्ता के दृष्टिकोण से देखने का प्रयास करें, जो टूल से बहुत खुश है, लेकिन लगता है कि वह खुश हो सकता है।

तो:

  1. वहाँ इस तरह काम करने के लिए एक तरह से मैं Maven कॉन्फ़िगर कर सकते हैं है? (और ऐसा करना बुद्धिमान होगा)

  2. क्या शायद कोई अन्य उपकरण है, मुझे पता नहीं है कि यह ऐसा करता है?

+2

+ 1 आपके प्रश्न की अच्छी भावना के लिए :) –

उत्तर

9

Maven विन्यास निश्चित रूप से अत्यधिक शब्द है, Maven 3 अन्य बातों के (कुछ विचार के लिए these videos देखें) के बीच इसका समाधान करना है, और वहाँ एक plugin for Maven 2 कि विन्यास के लिए अनुमति देता है YAML में परिभाषित किया जा रहा है। एक experimental "terse" branch भी है जो कुछ हद तक कॉन्फ़िगरेशन के आकार को कम करने, विशेषताओं का समर्थन करता है।

उदाहरण के लिए:

groupId: org.twdata.maven 
artifactId: maven-yamlpom-plugin 
version: 1.0-SNAPSHOT 
packaging: maven-plugin 
name: YAML POM Plugin 
dependencies: 
    - { groupId: org.apache.maven, artifactId: maven-plugin-api, version: 2.0 } 
    - { groupId: SnakeYAML, artifactId: SnakeYAML, version: 1.1 } 
    - { groupId: commons-io, artifactId: commons-io, version: 1.4 } 
    - { groupId: dom4j, artifactId: dom4j, version: 1.4 } 
    - { groupId: junit, artifactId: junit, version: 3.8.1, scope: test } 
    - { groupId: xmlunit, artifactId: xmlunit, version: 1.2, scope: test } 
build: 
    plugins: 
    - artifactId: maven-compiler-plugin 
     configuration: 
    source: 1.5 
    target: 1.5 
repositories: 
    - id: snakeyaml 
    name: SnakeYAML repository 
    url: http://snakeyamlrepo.appspot.com/repository 

Maven 2 के साथ, आप एक माता पिता परियोजना में सामान्य विन्यास को परिभाषित करने, उदाहरण आप का हवाला देते में से शब्दाडंबर को कम कर सकते हैं, निर्भरता सभी माता-पिता में परिभाषित किया जा सकता , या अभिभावक की dependencyManagement अनुभाग में ऐसा एक बच्चे के रूप

<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
</dependency> 

जो एक सुधार का एक सा है JUnit निर्भरता घोषणा कर सकते हैं।

प्लगइन दोनों को माता-पिता में घोषित किया जा सकता है और आपके बच्चे में परिभाषित नहीं किया जाना चाहिए।

4

मैं पूरी तरह से आपसे सहमत हूं कि pom.xml के कुछ हिस्सों को संघनित किया जा सकता है, विशेष रूप से <dependencies> भाग।

मैं वास्तव में घोषित करने की निर्भरता Ivy रास्ता की तरह:

<dependencies> 
    <dependency org="commons-lang" name="commons-lang" rev="2.0"/> 
    ... 

मैं एक blog post कि निर्भरता बनाने के लिए आइवी कर के रूप में एक प्रायोगिक उपकरण प्रस्तावित देखा है। हालांकि, मैंने कभी कोशिश नहीं की है।

+0

यदि केवल मेवेन लोगों को एक्सएमएल के बारे में जानने के लिए परेशान किया गया था, विशेष रूप से 'गुण' मौजूद हैं, शुरू होने से पहले .... मुझे शुरू भी नहीं करना पर। –