Maven - развертывание: файл развертывания над серией файлов в $ {project.build.directory} (target /)

Краткое описание моей ситуации - я работаю над кодовой базой, в которой есть аннотированные интерфейсы / классы JAX-WS, из которых мы генерируем wsdls с первым кодом. Мы используем CXF cxf-java2ws-plugin для генерации wsdl во время сборки в maven для включения в .jar, созданный для каждого модуля.

Мы хотели бы развернуть эти wsdl-файлы в репозитории maven, так как maven репозиторий может действовать как

  • импровизированный репозиторий сервисов (например, описанный здесь ).
  • дает клиентам простой способ использования плагина cxf codegen , указывая на координаты maven для wsdl вместо управления самими файлами wsdl

Пока что у меня есть файл pom, который использует dependency: unpack-dependencies, чтобы поместить все файлы wsdl в проекте в один каталог в этих модулях $ {project .build.directory} (широко известный как цель / для всех).

Чего я не знаю, так это перебрать каждый из этих файлов и вызывать deploy: deploy-file mojo для каждого wsdl. Какие у меня есть варианты, так как я действительно хочу автоматизировать процесс развертывания этих файлов wsdl и чтобы никто никогда не развертывал их вручную?

Для полноты картины вот файл pom:



    4.0.0
    
        rice
        org.kuali.rice
        2.0.0-m7-SNAPSHOT
    
    rice-dist-wsdl
    Rice WSDL Distributions
    pom

    
        ${project.build.directory}/wsdl
    


    
    
        
            ${project.groupId}
            rice-core-api
            ${project.version}
        
        
            ${project.groupId}
            rice-kew-api
            ${project.version}
        
        
            ${project.groupId}
            rice-kim-api
            ${project.version}
        
        
            ${project.groupId}
            rice-krms-api
            ${project.version}
        
        
            ${project.groupId}
            rice-ksb-api
            ${project.version}
        
        
            ${project.groupId}
            rice-shareddata-api
            ${project.version}
        
    

    
        
            
                org.apache.maven.plugins
                maven-dependency-plugin
                
                    
                        unpack-wsdls
                        generate-resources
                        
                            unpack-dependencies
                        
                        
                            **\/*.wsdl
                            ${project.build.directory}
                        
                    
                
            
        
    


Который помещает wsdls в target / wsdl (они содержатся внутри wsdl / внутри каждого .jar, от которого зависит):

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

Решение

Думал, что то, что я реализовал, отличалось от принятого ответа, предоставленного Райаном Стюардом, я принял его ответ, поскольку он заставил меня написать свой own.

По сути, это maven pom, который является подмодулем в многомодульном проекте, описанном выше. Я использую dependency: unpack-dependencies, а затем использую встроенный Groovy-скрипт для вызова deploy: deploy-file для каждого из этих файлов wsdl. Это немного похоже на хакерскую работу, но я не мог придумать лучшего способа сделать это без жесткого кодирования путей к файлам wsdl в модуле и вызова нескольких выполнений mojo файла развертывания: развертывания на них, что привело к очень подробному pom.



    4.0.0
    
        rice
        org.kuali.rice
        2.0.0-m7-SNAPSHOT
    
    rice-dist-wsdl
    Rice WSDL Distributions
    pom

    
        ${project.build.directory}/wsdl
    


    
    
        
            ${project.groupId}
            rice-core-api
            ${project.version}
        
        
            ${project.groupId}
            rice-kew-api
            ${project.version}
        
        
            ${project.groupId}
            rice-kim-api
            ${project.version}
        
        
            ${project.groupId}
            rice-krms-api
            ${project.version}
        
        
            ${project.groupId}
            rice-ksb-api
            ${project.version}
        
        
            ${project.groupId}
            rice-shareddata-api
            ${project.version}
        
    

    
        
            
                org.apache.maven.plugins
                maven-dependency-plugin
                
                    
                        unpack-wsdls
                        generate-resources
                        
                            unpack-dependencies
                        
                        
                            **\/*.wsdl
                            ${project.build.directory}
                        
                    
                
            
            
                org.codehaus.gmaven
                gmaven-plugin
                
                    
                        deploy
                        
                            execute
                        
                        
                            
                                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 && 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}")
                                    }
                                }
                            
                        
                    
                
            
        
    


7
задан Michael O'Cleirigh 17 September 2014 в 17:06
поделиться