2011-07-15 12 views
6

के भीतर फ़ाइलों की श्रृंखला पर तैनाती फ़ाइल, मेरी स्थिति पर त्वरित ब्रीफिंग - मैं एक कोड बेस पर काम कर रहा हूं जिसमें जैक्स-डब्ल्यूएस एनोटेटेड इंटरफेस/कक्षाएं हैं कि हम कोड-प्रथम wsdls उत्पन्न करते हैं। हम प्रत्येक मॉड्यूल के लिए उत्पादित .jar के भीतर शामिल करने के लिए मेवेन के भीतर निर्माण समय पर wsdls उत्पन्न करने के लिए सीएक्सएफ के सीएक्सएफ-जावा 2ws-प्लगइन का उपयोग कर रहे हैं।

हम क्या करना चाहते हैं क्या के बाद से Maven भंडार के रूप में

  • एक अस्थायी सेवा भंडार कार्य कर सकते हैं एक Maven भंडार करने के लिए इन wsdl फ़ाइलों को तैनात (जैसे वर्णित here के रूप में)
  • ग्राहकों के लिए एक आसान देना है Maven की ओर इशारा करते द्वारा cxf codegen plugin उपयोग करने के लिए जिस तरह से wsdl प्रबंध के बजाय एक wsdl के लिए निर्देशांक खुद को फाइल

क्या मैं अब तक मिल गया है निर्भरता का उपयोग करता है एक पोम फ़ाइल है: खोल निर्भरता सभी प्राप्त करने के लिए प्रोजेक्ट में wsdl फ़ाइलों में से इस मॉड्यूल के भीतर एक निर्देशिका में $ {project.build.directory} (आमतौर पर लक्ष्य के रूप में जाना जाता है/हर किसी के लिए जाना जाता है)।

मुझे नहीं पता कि कैसे करना है इन फ़ाइलों में से प्रत्येक के माध्यम से लूप करना और प्रत्येक wsdl पर deploy:deploy-file mojo को आमंत्रित करना है। यहां मेरे विकल्प क्या हैं क्योंकि मैं वास्तव में इन wsdl फ़ाइलों को तैनात करने की प्रक्रिया को स्वचालित करना चाहता हूं और किसी ने कभी भी उन्हें मैन्युअल रूप से तैनात नहीं किया है?

<?xml version="1.0"?> 
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" 
     xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
     <artifactId>rice</artifactId> 
     <groupId>org.kuali.rice</groupId> 
     <version>2.0.0-m7-SNAPSHOT</version> 
    </parent> 
    <artifactId>rice-dist-wsdl</artifactId> 
    <name>Rice WSDL Distributions</name> 
    <packaging>pom</packaging> 

    <properties> 
     <wsdl.location>${project.build.directory}/wsdl</wsdl.location> 
    </properties> 


    <!-- Depends on all API modules and modules that generate or contain wsdls --> 
    <dependencies> 
     <dependency> 
      <groupId>${project.groupId}</groupId> 
      <artifactId>rice-core-api</artifactId> 
      <version>${project.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>${project.groupId}</groupId> 
      <artifactId>rice-kew-api</artifactId> 
      <version>${project.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>${project.groupId}</groupId> 
      <artifactId>rice-kim-api</artifactId> 
      <version>${project.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>${project.groupId}</groupId> 
      <artifactId>rice-krms-api</artifactId> 
      <version>${project.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>${project.groupId}</groupId> 
      <artifactId>rice-ksb-api</artifactId> 
      <version>${project.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>${project.groupId}</groupId> 
      <artifactId>rice-shareddata-api</artifactId> 
      <version>${project.version}</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-dependency-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>unpack-wsdls</id> 
         <phase>generate-resources</phase> 
         <goals> 
          <goal>unpack-dependencies</goal> 
         </goals> 
         <configuration> 
          <includes>**\/*.wsdl</includes> 
          <outputDirectory>${project.build.directory}</outputDirectory> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

</project> 

कौन सा लक्ष्य/wsdl में wsdls shoves (वे/wsdl के भीतर समाहित कर रहे हैं अंदर प्रत्येक पर निर्भर किया जा रहा .jar):

[[email protected] ~/Repositories/Kuali/rice/dist-wsdl] 
> find . -iname '*.wsdl' | head -3 
./target/wsdl/CampusService.wsdl 
./target/wsdl/CountryService.wsdl 
./target/wsdl/CountyService.wsdl 

पूर्णता के लिए, यहाँ पोम फ़ाइल है


समाधान

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

असल में, यहां एक मेवेन पोम है जो ऊपर वर्णित बहु-मॉड्यूल प्रोजेक्ट में एक सबमिशन है। मैं निर्भरता का उपयोग कर रहा हूं: अनपैक-निर्भरताएं और फिर तैनाती कॉल करने के लिए इन-लाइन ग्रोवी स्क्रिप्ट का उपयोग करना: उन wsdl फ़ाइलों में से प्रत्येक पर तैनाती फ़ाइल। यह एक हैकबॉब का थोड़ा सा है, लेकिन मैं मॉड्यूल में wsdl फ़ाइलों को हार्डकोडिंग पथों के बिना ऐसा करने का बेहतर तरीका नहीं सोच सकता था और तैनाती के कई निष्पादन को बुला रहा था: उन पर तैनाती फ़ाइल mojo, एक बहुत verbose की ओर अग्रसर पोम।

<?xml version="1.0"?> 
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" 
     xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
     <artifactId>rice</artifactId> 
     <groupId>org.kuali.rice</groupId> 
     <version>2.0.0-m7-SNAPSHOT</version> 
    </parent> 
    <artifactId>rice-dist-wsdl</artifactId> 
    <name>Rice WSDL Distributions</name> 
    <packaging>pom</packaging> 

    <properties> 
     <wsdl.location>${project.build.directory}/wsdl</wsdl.location> 
    </properties> 


    <!-- Depends on all API modules and modules that generate or contain wsdls --> 
    <dependencies> 
     <dependency> 
      <groupId>${project.groupId}</groupId> 
      <artifactId>rice-core-api</artifactId> 
      <version>${project.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>${project.groupId}</groupId> 
      <artifactId>rice-kew-api</artifactId> 
      <version>${project.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>${project.groupId}</groupId> 
      <artifactId>rice-kim-api</artifactId> 
      <version>${project.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>${project.groupId}</groupId> 
      <artifactId>rice-krms-api</artifactId> 
      <version>${project.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>${project.groupId}</groupId> 
      <artifactId>rice-ksb-api</artifactId> 
      <version>${project.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>${project.groupId}</groupId> 
      <artifactId>rice-shareddata-api</artifactId> 
      <version>${project.version}</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-dependency-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>unpack-wsdls</id> 
         <phase>generate-resources</phase> 
         <goals> 
          <goal>unpack-dependencies</goal> 
         </goals> 
         <configuration> 
          <includes>**\/*.wsdl</includes> 
          <outputDirectory>${project.build.directory}</outputDirectory> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.codehaus.gmaven</groupId> 
       <artifactId>gmaven-plugin</artifactId> 
       <executions> 
        <execution> 
         <phase>deploy</phase> 
         <goals> 
          <goal>execute</goal> 
         </goals> 
         <configuration> 
          <source> 
           def repo_url 
           def repo_id 
           if ("${project.version}".endsWith("SNAPSHOT")) { 
            repo_url = "${kuali.repository.snapshot.url}" 
            repo_id = "${kuali.repository.snapshot.id}" 
           } else { 
            repo_url = "${kuali.repository.release.url}" 
            repo_id = "${kuali.repository.release.id}" 
           } 

           def wsdlGroupId = "${project.groupId}.wsdl" 
           new File("${wsdl.location}").eachFile() { file -> 
            serviceName = file.name.split("\\.")[0] 

            log.info("Deploying ${wsdlGroupId}:${serviceName}:wsdl:${project.version} to ${repo_id}") 

            execString = "mvn deploy:deploy-file -Dfile=${file} -Durl=${repo_url} -DrepositoryId=${repo_id} " 
            execString += "-DgroupId=${wsdlGroupId} -DartifactId=${serviceName} " 
            execString += "-Dversion=${project.version} -Dpackaging=wsdl -Dclassifier=wsdl" 

            def proc = execString.execute() 
            proc.waitFor() 

            err = proc.err.text 
            if (err != null &amp;&amp; err.length() > 0) { 
             log.error(err) 
             fail("Deployment failed for ${wsdlGroupId}:${serviceName}:wsdl:${project.version} to ${repo_id}. \n Run in verbose mode for full error.") 
            } else { 
             log.info("Successfully deployed ${wsdlGroupId}:${serviceName}:wsdl:${project.version} to ${repo_id}") 
            } 
           } 
          </source> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

</project> 
+0

मुझे यह बहुत पसंद है। मुझे कुछ ऐसा करने की ज़रूरत है। –

उत्तर

2

एक और संभावना: मेवेन चींटी कार्य deploy files कर सकते हैं। मैंने इसका कभी भी उपयोग नहीं किया है, लेकिन मैं शर्त लगाऊंगा कि आप सभी डब्लूएसडीएल को चुनने और तैनात करने के लिए मिलान करने वाले एंटरप्राइज़ कॉन्फ़िगरेशन और कुछ चींटी पैटर्न का उपयोग कर सकते हैं।

+1

मैंने इस तरह कुछ ऐसा करने के लिए समाप्त किया लेकिन जीएमवेन (ग्रोवी के मेवेन प्लगइन) के साथ एक स्क्रिप्ट को इन-लाइनिंग करके जो wsdl फ़ाइल नामों को लूप करता है और उनमें से प्रत्येक पर तैनाती फ़ाइल को कॉल करता है। आपके उत्तर के लिए धन्यवाद और मुझे ऐसा करने के लिए सोचने के लिए धन्यवाद। – whaley

2

बिल्ड हेल्पर प्लगइन आपकी मदद कर सकता है। आप इसे डब्लूएसडीएल प्रकाशित कर सकते हैं, लेकिन आपको प्रत्येक को स्पष्ट रूप से सूचीबद्ध करना होगा, और उनके पास आपके नामों में आपके पोम का आर्टिफैक्ट होगा। केवल वर्गीकरण बदल सकता है। उदाहरण के लिए:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.7</version> 
    <executions> 
     <execution> 
      <id>attach-WSDLs</id> 
      <phase>package</phase> 
      <goals> 
       <goal>attach-artifact</goal> 
      </goals> 
      <configuration> 
       <artifacts> 
        <artifact> 
         <file>${project.build.directory}/foo.wsdl</file> 
         <classifier>foo</classifier> 
         <type>wsdl</type> 
        </artifact> 
        <artifact> 
         <file>${project.build.directory}/bar.wsdl</file> 
         <classifier>bar</classifier> 
         <type>wsdl</type> 
        </artifact> 
       </artifacts> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

यदि आपका पोम के समन्वय myGroupId है:, तो कलाकृतियों स्थापित किया है और इस config का उपयोग कर तैनात myArtifactId-1.1.1-foo.wsdl और myArtifactId-1.1.1 नामित किया जाएगा 1.1.1: myArtifactId -bar.wsdl। यह सबसे अच्छा मुझे पता है।

+1

मैं ऐसा कर सकता था ... लेकिन मैं .wsdl फ़ाइलों की एक संभावित चर संख्या से निपट रहा हूं जिनके नाम मुझे समय से पहले नहीं पता हो सकता है। – whaley

संबंधित मुद्दे