The project is probably composed of various modules, with their dependency relationships, but the different modules are also logically separated. So it make completely sense that we'd like to share only on those submodules.
To do that we have to modify the pom.xml and remove the <parent> section and probably also specify properties and dependencies version that are often defined in the super pom.
But with the help of Eclipse and its "Effective POM" view it's not that hard.
The real problem is that all those actions are not enough to have a portable project.
What is missing is the list of dependency defined in the submodules that we do not want to share as source code and that won't be available to be downloaded from Maven public repositories.
Since those artifacts are required to build the project, what we can do is to manually install them from the command line with the typical:
mvn install:install-file -Dfile=my_module.jar -DgroupId=my.private.project -DartifactId=my_module -Dversion=1.0.0 -Dpackaging=jarIt works but it contrasts with the idea that our Maven build should be able to do all is required to build our project.
I was looking for an alternative solution and I have found it in this post on Stackoverflow: http://stackoverflow.com/questions/1355548/maven-including-jar-not-found-in-public-repository
Let me describe it and also offer a ready git repo for a rapid testing of it.
https://github.com/paoloantinori/maven_automated_artifacts_installation
The main idea is to use the exec-maven-plugin to automatically install the dependency for us, replicating the manual activity.
In this way we can script all the manual activities that we needed. To better distinguish between what are the external libraries and our project I suggest a multimodule project:
Parent | +---Dependency Project | +---Our Interesting ProjectNothing interesting in the parent pom.xml:
pom Sample :: Multimodule main_project dependencies_project
Let's have a look at the Main Project pom.xml:
As you can see we are defining 2 different things:com.example.giallone dependencies 1.0.0 com.example.giallone dep1 1.0.0 com.example.giallone dep2 1.0.0
Under "real dependencies" you see references to artifacts that the project needs but are not available in Maven Public Repositories.
While instead the first dependency is to trigger the installation of those missing jars, action performed by the other module of this multimodule project.
If you try now to build only this module it will fail with the following output , since those missing dependencies have not been installed yet:
pantinor@pantinor main_project$ mvn clean install /usr/lib/jvm/java [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Sample :: Main Project 1.0.0 [INFO] ------------------------------------------------------------------------ Downloading: http://repo.maven.apache.org/maven2/com/example/giallone/dependencies/1.0.0/dependencies-1.0.0.pom [WARNING] The POM for com.example.giallone:dependencies:jar:1.0.0 is missing, no dependency information available [WARNING] The POM for com.example.giallone:dep1:jar:1.0.0 is missing, no dependency information available [WARNING] The POM for com.example.giallone:dep2:jar:1.0.0 is missing, no dependency information available Downloading: http://repo.maven.apache.org/maven2/com/example/giallone/dependencies/1.0.0/dependencies-1.0.0.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.166s [INFO] Finished at: Thu Dec 20 13:02:20 GMT 2012 [INFO] Final Memory: 5M/148M [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal on project rules: Could not resolve dependencies for project com.example.giallone:rules:jar:1.0.0: The following artifacts could not be resolved: com.example.giallone:dependencies:jar:1.0.0, com.example.giallone:dep1:jar:1.0.0, com.example.giallone:dep2:jar:1.0.0: Could not find artifact com.example.giallone:dependencies:jar:1.0.0 in central (http://repo.maven.apache.org/maven2) -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException
Let's now have a look at the other module, dependencies_project:
What we are doing here is to use exec-maven-plugin to install for us the missing dependencies in the local repo.org.codehaus.mojo exec-maven-plugin 1.2.1 false install-in-repo-dep1 validate exec mvn install:install-file -Dfile=${basedir}/lib/dep1.jar -DgroupId=com.example.giallone -DartifactId=dep1 -Dversion=1.0.0 -Dpackaging=jar install-in-repo-dep2 validate exec mvn install:install-file -Dfile=${basedir}/lib/dep2.jar -DgroupId=com.example.giallone -DartifactId=dep2 -Dversion=1.0.0 -Dpackaging=jar
Those are the dependencies that prevent our main project to build successfully.
Having configured our main project to be dependent on this one, if we now build our project at the multimodule level, we will be able to trigger the 2 module in the right order:
[INFO] Reactor Build Order: [INFO] [INFO] Sample :: Multimodule [INFO] Sample :: Dependencies [INFO] Sample :: Main Project
And when Multimodule Project is built, all the external dependencies are already installed in the previous step, allowing us to see a successful build!
pantinor@pantinor install_artifacts_sample$ mvn clean install /usr/lib/jvm/java [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Reactor Build Order: [INFO] [INFO] Sample :: Multimodule [INFO] Sample :: Dependencies [INFO] Sample :: Main Project [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Sample :: Multimodule 1.0.0 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ common --- [INFO] [INFO] --- maven-install-plugin:2.3.1:install (default-install) @ common --- [INFO] Installing /data/repositories/github/install_artifacts_sample/pom.xml to /home/pantinor/.m2/repository/com/example/giallone/common/1.0.0/common-1.0.0.pom [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Sample :: Dependencies 1.0.0 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ dependencies --- [INFO] Deleting /data/repositories/github/install_artifacts_sample/dependencies_project/target [INFO] [INFO] --- exec-maven-plugin:1.2.1:exec (install-in-repo-dep1) @ dependencies --- /usr/lib/jvm/java [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Sample :: Dependencies 1.0.0 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-install-plugin:2.3.1:install-file (default-cli) @ dependencies --- [INFO] Installing /data/repositories/github/install_artifacts_sample/dependencies_project/lib/dep1.jar to /home/pantinor/.m2/repository/com/example/giallone/dep1/1.0.0/dep1-1.0.0.jar [INFO] Installing /tmp/mvninstall204045843544074291.pom to /home/pantinor/.m2/repository/com/example/giallone/dep1/1.0.0/dep1-1.0.0.pom [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.782s [INFO] Finished at: Thu Dec 20 13:06:58 GMT 2012 [INFO] Final Memory: 4M/117M [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- exec-maven-plugin:1.2.1:exec (install-in-repo-dep2) @ dependencies --- /usr/lib/jvm/java [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Sample :: Dependencies 1.0.0 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-install-plugin:2.3.1:install-file (default-cli) @ dependencies --- [INFO] Installing /data/repositories/github/install_artifacts_sample/dependencies_project/lib/dep2.jar to /home/pantinor/.m2/repository/com/example/giallone/dep2/1.0.0/dep2-1.0.0.jar [INFO] Installing /tmp/mvninstall3544830050220263281.pom to /home/pantinor/.m2/repository/com/example/giallone/dep2/1.0.0/dep2-1.0.0.pom [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.116s [INFO] Finished at: Thu Dec 20 13:07:01 GMT 2012 [INFO] Final Memory: 5M/148M [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ dependencies --- [debug] execute contextualize [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory /data/repositories/github/install_artifacts_sample/dependencies_project/src/main/resources [INFO] [INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ dependencies --- [INFO] No sources to compile [INFO] [INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ dependencies --- [debug] execute contextualize [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory /data/repositories/github/install_artifacts_sample/dependencies_project/src/test/resources [INFO] [INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ dependencies --- [INFO] No sources to compile [INFO] [INFO] --- maven-surefire-plugin:2.10:test (default-test) @ dependencies --- [INFO] No tests to run. [INFO] Surefire report directory: /data/repositories/github/install_artifacts_sample/dependencies_project/target/surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Results : Tests run: 0, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] --- maven-jar-plugin:2.3.2:jar (default-jar) @ dependencies --- [WARNING] JAR will be empty - no content was marked for inclusion! [INFO] Building jar: /data/repositories/github/install_artifacts_sample/dependencies_project/target/dependencies-1.0.0.jar [INFO] [INFO] --- maven-install-plugin:2.3.1:install (default-install) @ dependencies --- [INFO] Installing /data/repositories/github/install_artifacts_sample/dependencies_project/target/dependencies-1.0.0.jar to /home/pantinor/.m2/repository/com/example/giallone/dependencies/1.0.0/dependencies-1.0.0.jar [INFO] Installing /data/repositories/github/install_artifacts_sample/dependencies_project/pom.xml to /home/pantinor/.m2/repository/com/example/giallone/dependencies/1.0.0/dependencies-1.0.0.pom [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Sample :: Main Project 1.0.0 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ rules --- [INFO] Deleting /data/repositories/github/install_artifacts_sample/main_project/target [INFO] [INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ rules --- [debug] execute contextualize [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory /data/repositories/github/install_artifacts_sample/main_project/src/main/resources [INFO] [INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ rules --- [INFO] No sources to compile [INFO] [INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ rules --- [debug] execute contextualize [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory /data/repositories/github/install_artifacts_sample/main_project/src/test/resources [INFO] [INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ rules --- [INFO] No sources to compile [INFO] [INFO] --- maven-surefire-plugin:2.10:test (default-test) @ rules --- [INFO] No tests to run. [INFO] Surefire report directory: /data/repositories/github/install_artifacts_sample/main_project/target/surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Results : Tests run: 0, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] --- maven-jar-plugin:2.3.2:jar (default-jar) @ rules --- [WARNING] JAR will be empty - no content was marked for inclusion! [INFO] Building jar: /data/repositories/github/install_artifacts_sample/main_project/target/rules-1.0.0.jar [INFO] [INFO] --- maven-install-plugin:2.3.1:install (default-install) @ rules --- [INFO] Installing /data/repositories/github/install_artifacts_sample/main_project/target/rules-1.0.0.jar to /home/pantinor/.m2/repository/com/example/giallone/rules/1.0.0/rules-1.0.0.jar [INFO] Installing /data/repositories/github/install_artifacts_sample/main_project/pom.xml to /home/pantinor/.m2/repository/com/example/giallone/rules/1.0.0/rules-1.0.0.pom [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary: [INFO] [INFO] Sample :: Multimodule ............................. SUCCESS [0.545s] [INFO] Sample :: Dependencies ............................ SUCCESS [6.800s] [INFO] Sample :: Main Project ............................ SUCCESS [0.344s] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 7.816s [INFO] Finished at: Thu Dec 20 13:07:03 GMT 2012 [INFO] Final Memory: 7M/117M [INFO] ------------------------------------------------------------------------
Hey, great post, it helped a lot. As a token of gratitude i'll contribute with more knowledge that can help improve this document:
ReplyDeleteYou can use the maven install plugin from the maven pom directly without having to re-invoke maven. Here is how you can do it:
org.apache.maven.plugins
maven-install-plugin
2.4
relative/path/to/file.jar
pt.example.package
package
version
jar
validate
install-file
the xml tags got screwed up, here's the code:
Delete<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.4</version>
<configuration>
<file>relative/path/to/file.jar</file>
<groupId>pt.example.package</groupId>
<artifactId>package</artifactId>
<version>version</version>
<packaging>jar</packaging>
</configuration>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>install-file</goal>
</goals>
</execution>
</executions>
</plugin>
you can download all the dependecies here: http://jar-download.com/
ReplyDeleteyou can download all the dependecies here: http://jar-download.com/
ReplyDeleteThanks for giving great kind of information. So useful and practical for me. Thanks for your excellent blog, nice work keep it up thanks for sharing the knowledge.Tourist visa services Delhi
ReplyDeletethanks for Providing a Good Information
ReplyDeleteanyone want to learn advance devops tools or devops online training visit:
DevOps Training
DevOps Online Training
Professional Certification training for HIPAA security officer training and HIPAA privacy officer training for $1200-$3200. Classroom, online, onsite and online live. Get certified today.
ReplyDeletePublish your printed book to Kindle or any other hard copy and paperback books to Kindle Mobi services with Ebookconversion service solutions.
ReplyDeleteHard Copy to Kindle Conversion
Really useful information. Thank you so much for sharing.It will help everyone.Keep Post.
ReplyDeleteDevOps Training in Chennai | DevOps Training in anna nagar | DevOps Training in omr | DevOps Training in porur | DevOps Training in tambaram | DevOps Training in velachery
Really valuable info.
ReplyDeletePHP Training in Chennai | Certification | Online Training Course | Machine Learning Training in Chennai | Certification | Online Training Course | iOT Training in Chennai | Certification | Online Training Course | Blockchain Training in Chennai | Certification | Online Training Course | Open Stack Training in Chennai |
Certification | Online Training Course
Very interesting post,
ReplyDeletethanks for shearing with us.
GMAT online Training
GMAT coaching in hyderabad
Thanks a lot for sharing kind of information. Your article provide such a great information with good knowledge.You make me happy for sharing, in this post some special information.thanks.
ReplyDeletepython training in bangalore
python training in hyderabad
python online training
python training
python flask training
python flask online training
python training in coimbatore
Am really impressed about this blog because this blog is very easy to learn and understand clearly.This blog is very useful for the college students and researchers to take a good notes in good manner,I gained many unknown information.
ReplyDeleteData Science Training In Chennai
Data Science Online Training In Chennai
Data Science Training In Bangalore
Data Science Training In Hyderabad
Data Science Training In Coimbatore
Data Science Training
Data Science Online Training
Full Stack Course Chennai
ReplyDeleteFull Stack Training in Bangalore
Full Stack Course in Bangalore
Full Stack Training in Hyderabad
Full Stack Course in Hyderabad
Full Stack Training
Full Stack Course
Full Stack Online Training
Full Stack Online Course
Very informative post! I'm learning a lot from your articles. Keep us updated by sharing more such posts.
ReplyDeleteJava Training in Chennai
Java Training in Bangalore
Java Training in Hyderabad
Java Training
Java Training in Coimbatore
thank you for the information
ReplyDeleteangular js course in chennai
angular course in chennai
angular js online course in chennai
angular js course in bangalore
angular js course in hyderabad
angular js course in coimbatore
angular js course
angular js online course
Nice post!
ReplyDeleteWorried About QuickBooks Error ?Get in touch with QuickBooks expert for instant solution.
Click Here to know how to fix QuickBooks Error 248
Dial on QuickBooks Toll-free Number +1-855-977-7463.
Thanks for Sharing This Article.It is very so much valuable content. I hope these Commenting lists will help to my website
ReplyDeletedevops online training
best devops online training
top devops online training
Did you know that you can easily view the contents of your phone on your TV without a cable? With a screen mirror app you can easily do the screen mirroring from Android to TV. Check out www.screenmirroring.me to find out more.
ReplyDeleteShreeja Health Care is leading manufacturer of Oil Maker Machine. Shreeja Oil Extraction Machine is able to extract oil from various seeds like peanuts, Coconut, Sesame, Soybean, macadamia nuts, walnuts, sunflower seeds, vegetable seeds flaxseed etc.
ReplyDeleteKeytexmachines is leading CNC Machining Job Work in surat With Excellent Quality, Cost Effective Price & Prompt Delivery. CNC Machining Job Work, CNC Turning Job Work, CNC Machine Service offered by Keytex machines, Surat.
ReplyDeleteYami immigration is a well-known and experienced immigration consultant in Surat. We provide Immigration Services for many countries such as Italy, Canada, France, Australia, Germany, USA, Malaysia, New Zealand, and Singapore.
Delete
ReplyDeleteDr. Vivek Galani is a leading expert in skin and hair. At hair transplant clinic in Surat Skin Care, Cosmetic Laser, Hair Transplant & Slimming Center, Dr. Galani offers the most advanced cosmetic and dermatologic care treatments. The clinic uses advanced FUE methods to produce high-quality hair transplants.
Shreeja Health Care is leading manufacturer of Oil Making Machine. Shreeja Oil Extraction Machine is able to extract oil from various seeds like peanuts, Coconut, Sesame, Soybean, macadamia nuts, walnuts, sunflower seeds, vegetable seeds flaxseed et.
ReplyDeleteThanks for Sharing This Article. It is very so much valuable content.
ReplyDeleteDevOps Training
DevOps Online Training
Thanks for Sharing This Article.It is very so much valuable content. I hope these Commenting lists will help to my website
ReplyDeletedevops online training
best devops online training
top devops online training
Nice & Informative Blog !
ReplyDeleteOur team at QuickBooks Customer Service makes sure to achieve maximum customer satisfaction in the current circumstances.
Shreeja Health Care is leading manufacturer of Oil Maker Machine. Shreeja Oil Extraction Machine is able to extract oil from various seeds like peanuts, Coconut, Sesame, Soybean, macadamia nuts, walnuts, sunflower seeds, vegetable seeds flaxseed etc.
ReplyDelete
ReplyDeleteHey! Lovely blog. Your blog contains all the details and information related to the topic. In case you are a QuickBooks user, here is good news for you. You may encounter any error like QuickBooks Error, visit at QuickBooks Customer Service for quick help.
Thanks for sharing such useful information with us. I hope you will share some more info about of QuickBooks for MAC Support . Please keep sharing. We will also provide QuickBooks Support Phone Number (855)746-5668 for instant help.
ReplyDeleteWe SVJ Technocoat are the leading Service Provider and Exporter of an extensive array of PVD Coating In Surat Service and Vapor Deposition Coating Service etc. We are a well known firm for providing excellent quality coating services across the nation and in a timely manner. Owing to our improvised business models, our professionals are offering integrated solutions for our clients
ReplyDeleteDIYAM Impex Our Company Lab Grown Diamond Manufacturer In Surat. We have gone from strength to strength over the years, having expanded from our core business of diamond manufacturing to Real Estate, Renewable Energy and Venture Capital. Diamond has its many utility and its industrial value is enhanced by our effective services. We now focus exclusively on Lab Grown Diamonds. DIYAM IMPEX has grown to become a globally trusted and respected player in the diamond industry over the last five decades. Our expertise lies in our ability to produce a consistent supply of quality polished diamonds in all shapes and sizes.
ReplyDeletenice blog. We provide quickbooks customer service you can contact us on call. 877-603-0806
ReplyDeleteCandela GentleLASE medical grade laser applies precise, controlled pulses of laser. Laser Hair Removal in Auckland energy that reach down the hair shaft into the follicle underneath the skin, cauterizing the hair at its root. the encompassing tissue or skin isn’t damaged. The laser’s gentle beam of sunshine damages and consequently prevents the follicle from growing.
ReplyDeleteSuch a nice blog, thanks for sharing with everyone, if you face trouble resolving QuickBooks Errors, Contact:Quickbooks customer service number.+18554442233
ReplyDeletenice blog. you are looking for a best custumer service Quickbooks support serviceyou can contact us at.+13464148256
ReplyDeleteRQC is one of the Best Best hair transplant doctor in surat, with services, including Hair Transplant, Hair Treatment, Hairfall and Hair Loss, dermatology, and Skincare. RQC brings you the best services in hair transplant, Hair Treatment.
ReplyDeleteWe SVJ Technocoat are the leading Service Provider and Exporter of an extensive array of PVD Coating Services In Surat Service and Vapor Deposition Coating Service etc. We are a well known firm for providing excellent quality coating services across the nation and in a timely manner. Owing to our improvised business models, our professionals are offering integrated solutions for our clients.
ReplyDeleteDIYAM Impex Our Company Lab Grown Diamond Manufacturer. We have gone from strength to strength over the years, having expanded from our core business of diamond manufacturing to Real Estate, Renewable Energy and Venture Capital. Diamond has its many utility and its industrial value is enhanced by our effective services. We now focus exclusively on Lab Grown Diamonds. DIYAM IMPEX has grown to become a globally trusted and respected player in the diamond industry over the last five decades. Our expertise lies in our ability to produce a consistent supply of quality polished diamonds in all shapes and sizes.
ReplyDeleteCandela GentleLASE medical grade laser applies precise, controlled pulses of laser. Auckland Laser Hair Removal energy that reach down the hair shaft into the follicle underneath the skin, cauterizing the hair at its root. the encompassing tissue or skin isn’t damaged. The laser’s gentle beam of sunshine damages and consequently prevents the follicle from growing.
ReplyDeleteShreeja Oil Maker is a global leading manufacturer, wholesaler, supplier, exporter of various small scale machinery. Shreeja oil maker machine or Mini Oil Maker Machine is one of our innovative product which is able to extract 100% pure oil from the various seed. This is also known as a cold oil press machine or mini oil Ghani. We have a stronghold in national as well as a worldwide market.
ReplyDeleteThis is an awesome post. Really very informative and creative content. Thanks for sharing!
ReplyDeleteBiotech Internships | internships for cse students | web designing course in chennai | it internships | electrical engineering internships | internship for bcom students | python training in chennai | web development internship | internship for bba students | internship for 1st year engineering students
Your blog great. New chapter of life is yoga , Let's start to do. provide yoga , meditation basics yoga , yoga benefits , , types of yoga , - theyogainfo.com you reach us at
ReplyDeletebulk whatsapp sender software provides various features like Unlimited Messages sending, Multi-multimedia message sending, Numbers Filters, Groups Contacts Grabber, Anti Block Module, Sleep Control, Speed control, delay control etc. with In built Google Map Extractor And Just Dial Extractor.
ReplyDelete➡ Our Services:
✅ Website Design & Development
✅ Software Development
✅ Mobile App Development
✅ CRM / ERP Development
✅ Digital Marketing
✅ SEO / SEM / SMM / ASO
✅ Paid Promotion
✅ Graphics & Design
☎ +91 99132 99806 | +91 99132 99862
UID Fashion Designing Institutes in Surat is one of the Leading fashion institute in surat. professional fashion designing course in India is in demand these day by day, what can be best than pursuing fashion designing course from the fashion capital of India itself. Yes,UID fashion designing course in surat are talking about the city of surat, where you can have ample select when it comes to fashion design.
ReplyDeleteFAB VOGUE STUDIO provide all kind of Fabric which can be use for Making any designer apparel. Kora Silk Fabric We guarantee you’ll love working with us. Design Customization Available. Wholesale price available on request. Quality Assurance. COD Available.
ReplyDeleteKeytexmachines is leading vmc machine job work India With Excellent Quality, Cost Effective Price & Prompt Delivery. CNC Machining Job Work, CNC Turning Job Work, CNC Machine Service offered by Keytex machines, Surat.
ReplyDeleteRQC is one of the Best Best Hair Clinic In Surat, with services, including Hair Transplant, Hair Treatment, Hairfall and Hair Loss, dermatology. RQC brings you the best services in hair transplant, Hair Treatment.
ReplyDeletethanks for Sharing This Article.It is very so much valuable content. I hope these Commenting lists will help to my website devops Online Training
ReplyDeletebest devops Online Training
top devops Online Training
QuickBooks also offers live chat support as well as email support which allows businesses who are out of the office or at home to access QuickB's qualified help desk staff. The QuickBooks Service Number is +1 888-471-2380 and is always available 24 hours a day to serve you with all your QuickBooks questions.
ReplyDeleteThe toll free number is Quickbooks Suppport Phone Number +1 855-769-6757 and you need to dial that number for your queries and errors issues.
ReplyDeleteNice blog. If you are looking for a best knowledge of yoga Yoga, yogainfo , yoga asanas you reach us at
ReplyDeleteThis comment has been removed by the author.
ReplyDeleteWe understand how important it is to mark your business presence online. Over the years, we have gained strong domain experience and expertise in technologies for web, mobile and software design and development.
ReplyDeletesoftware development company in surat
We are a manufacturer of Organic stevia drops (sugar alternatives) in Surat & Supply Across India. It Is Ideal For Diabetics, weight loss, etc... Buy Now!
ReplyDeletestevia for diabetic patients
CP International is one of the Leading Exporters, Manufacturers & Suppliers of Indian Spices, Pooja items, Homemade & Dry fruits Products, etc. Across USA & UK.
ReplyDeleteLeading Indian Spices Exporters in USA
의정부출장마사지 동해출장마사지 삼척출장마사지 남양주출장마사지 포천출장마사지 수원출장마사지
ReplyDelete속초출장마사지 원주출장마사지 강릉출장마사지
ReplyDeleteNice article thank you for the sharing article. If you are irritated with your blocking website then I have one article for you unblocked memes this article will help you access your premises' restricted or censored content. your everyday schedule likely will permit you to download it or even visit the site.
ReplyDelete옥천군출장샵
ReplyDelete영동군출장샵
증평군출장샵
진천군출장샵
괴산군출장샵
음성군출장샵
Use Bulk whatsApp Sender to Reach your customers at Lighting Speed with Whatso.
ReplyDeleteFeatures:
Grab Contacts from WhatsApp Groups, Fast sending mode, Schedule Sending & Numbers Filter.
manycam crack
ReplyDeletemirillis action crack
beecut crack