মাভেন 2: এন্টারপ্রাইজ প্রকল্পের জন্য সেরা অনুশীলন (EAR ফাইল)


100

আমি শুধু এন্টি থেকে মাভেনে স্যুইচ করছি এবং একটি EAR ফাইল ভিত্তিক এন্টারপ্রাইজ প্রকল্প স্থাপনের জন্য সেরা অনুশীলনটি বের করার চেষ্টা করছি?

ধরা যাক আমি EJBs এর জন্য একটি জার ফাইল, ওয়েব স্তরের জন্য একটি ওয়ার ফাইল এবং আনুষাঙ্গিক বর্ণনামূলক বর্ণনাকারী EAP ফাইলের সাথে encapsulating EAR ফাইল সহ একটি সুন্দর স্ট্যান্ডার্ড প্রকল্প তৈরি করতে চাই।

আমি কিভাবে এটি সম্পর্কে যেতে হবে? archetypeArtifactId=maven-archetype-webappযুদ্ধ ফাইলের মতো প্রকল্পটি তৈরি করুন এবং সেখান থেকে প্রসারিত করবেন? এর জন্য সর্বোত্তম প্রকল্প কাঠামো (এবং পিওএম ফাইলের উদাহরণ) কী? আপনি কানের ফাইল সম্পর্কিত ডিপ্লোমেন্ট বর্ণনাকারী ইত্যাদি কোথায় আটকে রাখবেন?

কোন সাহায্যের জন্য ধন্যবাদ।

উত্তর:


95

আপনি একটি নতুন প্রকল্প তৈরি করুন। নতুন প্রকল্পটি হল আপনার ইআর অ্যাসেম্বলি প্রকল্প যা আপনার ইজেবি প্রকল্প এবং আপনার ওয়ার প্রকল্পের জন্য দুটি নির্ভরশীলতা ধারণ করে।

সুতরাং আপনি এখানে তিনটি maven প্রকল্প আছে। একটি ইজেবি। এক যুদ্ধ একটি কানের কান যা দুটি অংশ এক সাথে টেনে নিয়েছে এবং কান তৈরি করে।

স্থাপনা বিবরণকারীগুলি মেন দ্বারা উত্পাদিত হতে পারে, বা EAR প্রকল্পের কাঠামোর মধ্যে সংস্থান ডিরেক্টরিতে রাখা যেতে পারে।

ম্যাভেন-ইয়ার-প্লাগইনটি এটি কনফিগার করতে আপনি যা ব্যবহার করেন তা হ'ল এবং ডকুমেন্টেশনটি ভাল তবে আপনি কীভাবে সাধারণভাবে কাজ করেন তা কীভাবে নির্ণয় করতে পারছেন তা পরিষ্কার নয়।

উদাহরণস্বরূপ আপনি এই জাতীয় কিছু করতে পারেন:

<?xml version="1.0" encoding="utf-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany</groupId>
  <artifactId>myEar</artifactId>
  <packaging>ear</packaging>
  <name>My EAR</name>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-ear-plugin</artifactId>
        <configuration>
          <version>1.4</version>
          <modules>
            <webModule>
              <groupId>com.mycompany</groupId>
              <artifactId>myWar</artifactId>
              <bundleFileName>myWarNameInTheEar.war</bundleFileName>
              <contextRoot>/myWarConext</contextRoot>
            </webModule>
            <ejbModule>
              <groupId>com.mycompany</groupId>
              <artifactId>myEjb</artifactId>
              <bundleFileName>myEjbNameInTheEar.jar</bundleFileName>
            </ejbModule>
          </modules>
          <displayName>My Ear Name displayed in the App Server</displayName>
          <!-- If I want maven to generate the application.xml, set this to true -->
          <generateApplicationXml>true</generateApplicationXml>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.3</version>
        <configuration>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>
    </plugins>
    <finalName>myEarName</finalName>
  </build>

  <!-- Define the versions of your ear components here -->
  <dependencies>
    <dependency>
      <groupId>com.mycompany</groupId>
      <artifactId>myWar</artifactId>
      <version>1.0-SNAPSHOT</version>
      <type>war</type>
    </dependency>
    <dependency>
      <groupId>com.mycompany</groupId>
      <artifactId>myEjb</artifactId>
      <version>1.0-SNAPSHOT</version>
      <type>ejb</type>
    </dependency>
  </dependencies>
</project>

98
আমি আমার নিজের উত্তরটি এক বছর পরে পেয়েছি যখন আমার একই প্রশ্ন ছিল। ভাল চাকরি স্ব!
মাইক কর্নেল

1
আমার জন্য এটি কাজ করেছিল যখন আমি typeহিসাবে সেট করিejb <type>ejb</type>
gammay

সেই পোম কিছু সতর্কতা ছুঁড়েছে: 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-ear-plugin is missingএবং 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing, যাতে আপনি আপনার অন্যথায় দুর্দান্ত উত্তরটি আপডেট করতে চাইতে পারেন
ডিয়েগো অ্যালফোনসো

46

ম্যাভেন আরকিটাইপ চালাতে যা আমাকে অনেকটা সাহায্য করেছিল: লক্ষ্য উত্পন্ন করে একটি প্রত্নতাত্ত্বিক থেকে চয়ন করুন, যার মধ্যে কয়েকটি নিয়মিত আপডেট হয় বলে মনে হয় (বিশেষত জেবস ভালভাবে বজায় রেখেছেন বলে মনে হয়)।

mvn archetype:generate

কয়েক নম্বর প্রত্নতাত্ত্বিক তালিকা থেকে একটি তালিকাতে উপস্থিত হয়েছে যা থেকে নির্বাচন করতে হবে (এখনকার হিসাবে 519!)। লক্ষ্যটি, এখনও চলমান, আমাকে একটি নম্বর লিখে বা একটি অনুসন্ধানের স্ট্রিং প্রবেশ করে একটি নির্বাচন করতে অনুরোধ করেছে:

513: remote -> org.xwiki.commons:xwiki-commons-component-archetype
514: remote -> org.xwiki.rendering:xwiki-rendering-archetype-macro
515: remote -> org.zkoss:zk-archetype-component
516: remote -> org.zkoss:zk-archetype-webapp
517: remote -> ru.circumflex:circumflex-archetype (-)
518: remote -> se.vgregion.javg.maven.archetypes:javg-minimal-archetype (-)
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains):

আমি অনুসন্ধানের স্ট্রিং "কানে" প্রবেশ করিয়েছি, যা কেবলমাত্র 8 টি আইটেমে তালিকাটি হ্রাস করেছে (আজকের হিসাবে):

Choose archetype:
1: remote -> org.codehaus.mojo.archetypes:ear-j2ee14 (-)
2: remote -> org.codehaus.mojo.archetypes:ear-javaee6 (-)
3: remote -> org.codehaus.mojo.archetypes:ear-jee5 (-)
4: remote -> org.hibernate:hibernate-search-quickstart (-)
5: remote -> org.jboss.spec.archetypes:jboss-javaee6-ear-webapp 
6: remote -> org.jboss.spec.archetypes:jboss-javaee6-webapp-ear-archetype
7: remote -> org.jboss.spec.archetypes:jboss-javaee6-webapp-ear-archetype-blank
8: remote -> org.ow2.weblab.tools.maven:weblab-archetype-searcher

আমি "org.jboss.spec.archetyype: jboss-javaee6-ear-webapp" নির্বাচন করেছি (এই উদাহরণে "5" নির্বাচনটি প্রবেশ করে)।

এর পরে, লক্ষ্যটি আমাকে গ্রুপআইডি, আর্টিফ্যাক্টআইডি, প্যাকেজের নাম ইত্যাদিতে প্রবেশ করতে বলেছে এবং এটি নিম্নলিখিত নথিভুক্ত উদাহরণ প্রয়োগ করে:

[pgarner@localhost Foo]$ tree
.
|-- Foo-ear
|   `-- pom.xml
|-- Foo-ejb
|   |-- pom.xml
|   `-- src
|       |-- main
|       |   |-- java
|       |   |   `-- com
|       |   |       `-- foo
|       |   |           |-- controller
|       |   |           |   `-- MemberRegistration.java
|       |   |           |-- data
|       |   |           |   `-- MemberListProducer.java
|       |   |           |-- model
|       |   |           |   `-- Member.java
|       |   |           `-- util
|       |   |               `-- Resources.java
|       |   `-- resources
|       |       |-- import.sql
|       |       `-- META-INF
|       |           |-- beans.xml
|       |           `-- persistence.xml
|       `-- test
|           |-- java
|           |   `-- com
|           |       `-- foo
|           |           `-- test
|           |               `-- MemberRegistrationTest.java
|           `-- resources
|-- Foo-web
|   |-- pom.xml
|   `-- src
|       `-- main
|           |-- java
|           |   `-- com
|           |       `-- foo
|           |           `-- rest
|           |               |-- JaxRsActivator.java
|           |               `-- MemberResourceRESTService.java
|           `-- webapp
|               |-- index.html
|               |-- index.xhtml
|               |-- resources
|               |   |-- css
|               |   |   `-- screen.css
|               |   `-- gfx
|               |       |-- banner.png
|               |       `-- logo.png
|               `-- WEB-INF
|                   |-- beans.xml
|                   |-- faces-config.xml
|                   `-- templates
|                       `-- default.xhtml
|-- pom.xml
`-- README.md

32 directories, 23 files

চারটি পোম ফাইল পড়ার পরে, যা ভালভাবে মন্তব্য করা হয়েছিল, আমার প্রয়োজনীয় সমস্ত তথ্য আমার কাছে ছিল।

./pom.xml
./Foo-ear/pom.xml
./Foo-ejb/pom.xml
./Foo-web/pom.xml

3
এটি কাজ করে, তবে এটি আপনার প্রকল্পে জবস-নির্দিষ্ট নির্ভরতাগুলির একগুচ্ছ সংস্থান করে, যা আপনি সত্যের পরে পরিষ্কার করতে বা করতে চান না।
ইয়ান ম্যাকলেয়ার্ড 14'12

24

আমি মনে করি যে ভাল (বা সেরা অনুশীলন) প্রারম্ভিক প্রকল্প কাঠামো আমি কী মনে করি তা দেখাতে একটি গিথুব সংগ্রহস্থল তৈরি করেছি ...

https://github.com/StefanHeimberg/stackoverflow-1134894

কিছু কীওয়ার্ড:

  • মাভেন ঘ
  • বিওএম (নিজস্ব নির্ভরতাগুলির পরিচালনা)
  • সমস্ত প্রকল্পের জন্য পিতামাতার (বহিরাগত নির্ভরতা থেকে নির্ভরশীলতা এবং বিশ্বব্যাপী প্রকল্পের কনফিগারেশনের জন্য প্লাগইন ম্যানেজমেন্ট)
  • জুনিত / মোকিটো / ডিবিউনিত
  • WEB-INF / lib ছাড়াই ক্লিন ওয়ার প্রকল্প, কারণ নির্ভরতা EAR / lib ফোল্ডারে রয়েছে।
  • ক্লিন ইয়ার প্রকল্প
  • জাভা EE7 এর জন্য ন্যূনতম স্থাপনার বর্ণনাকারী
  • কোনও স্থানীয় ইজেবি ইন্টারফেস নেই কারণ @ লোকালবিয়ান যথেষ্ট।
  • Maven ব্যবহারকারীর বৈশিষ্ট্যগুলির মাধ্যমে সর্বনিম্ন maven কনফিগারেশন
  • সার্লেটলে ৩.১ / ইজেবি ৩.২ / জেপিএ ২.১ এর প্রকৃত স্থাপনার বর্ণনাকারী
  • আর্কিটেকচারের নিয়মগুলি পরীক্ষা করতে ম্যাকার-মভেন-প্লাগইন ব্যবহার
  • ইন্টিগ্রেশন টেস্ট সক্ষম হয়েছে, তবে এড়িয়ে গেছে। (skipITs = মিথ্যা) সিআই বিল্ড সার্ভারে সক্ষম করতে দরকারী

ম্যাভেন আউটপুট:

Reactor Summary:

MyProject - BOM .................................... SUCCESS [  0.494 s]
MyProject - Parent ................................. SUCCESS [  0.330 s]
MyProject - Common ................................. SUCCESS [  3.498 s]
MyProject - Persistence ............................ SUCCESS [  1.045 s]
MyProject - Business ............................... SUCCESS [  1.233 s]
MyProject - Web .................................... SUCCESS [  1.330 s]
MyProject - Application ............................ SUCCESS [  0.679 s]
------------------------------------------------------------------------
BUILD SUCCESS
------------------------------------------------------------------------
Total time: 8.817 s
Finished at: 2015-01-27T00:51:59+01:00
Final Memory: 24M/207M
------------------------------------------------------------------------

2
আমি সত্যিই আপনার প্যাকেজিং এবং স্থাপত্য পদ্ধতির পছন্দ করি। আপনার প্রকল্পটি একটি মাভেন আরকিটাইপ হিসাবে প্যাকেজিংয়ের বিষয়ে ভাবা উচিত।
Jörg

2
খুব সুন্দর সমাধান! যদিও আমার একটি প্রশ্ন আছে: কেন প্যারেন্ট প্রোজেক্টে বিওএম স্টাফ প্যাক করবেন না? অতিরিক্ত স্তর কেন?
sschober

1
উদ্বেগ বিচ্ছেদ কারণ। বোমা অন্যান্য প্রকল্প দ্বারা আমদানি করা যেতে পারে। আপনার কেবলমাত্র নির্ভরতাগুলির নির্ভরতা পরিচালনা প্রয়োজন এবং আপনি যে নির্ভরতা ব্যবহার করছেন তা নির্ভরতা পরিচালনা নয়। ঠিক আছে. আপনি বলতে পারেন যে কেউ যদি আপনার প্রজেক্ট ব্যবহার না করে তবে এই অতিরিক্ত স্তরটি নেসেকারি নয় .. তবে আমি মনে করি এটিও বোধগম্য ... পঠনযোগ্যতা। প্যারেন্ট প্রকল্পের নির্ভরতা আপনার নির্ভরতাগুলির সাথে মিশ্রিত হয় না ... একটি বড় প্রকল্পে> 50 টি অভ্যন্তরীণ মাভেন প্রকল্পের সাথে প্যারেন্ট প্রোজেক্টের অভ্যন্তরীণ ব্যবস্থাপনা
কোনও গোলমাল

2
অন্য কারণটি হ'ল maven.apache.org/guides/intr پيداوار/… নথিভুক্ত হিসাবে একই কাঠামো । এটি এমন একটি দলে কাজ করতে সহায়তা করে যেখানে দলের সদস্যরা প্রায়শই এটি "ডিফল্ট" নথিভুক্ত উপায় পরিবর্তন করে change
স্টেফানহিমবার্গ

2
BTW। মাল্টি প্রজেক্ট সেটআপ কীভাবে করা যায় তা দেখানোর জন্য আমি একবার গিটহাব প্রজেক্ট তৈরি করেছি: github.com/StefanHeimberg/maven3-multapplication-setup (সংস্থার অভ্যন্তরীণ আলোচনার জন্য)
স্টিফানহিমবার্গ

7

নেটবিয়ান আইডিই স্বয়ংক্রিয়ভাবে স্ট্রাকচারটি সংজ্ঞায়িত করে যা প্যাট্রিক গার্নারের পরামর্শ অনুসারে প্রায় অনুরূপ। নেটবিয়ান ব্যবহারকারীদের জন্য

ফাইল -> নতুন প্রকল্প -> বাম পাশে মাভেন এবং ডানদিকে নির্বাচন করুন মাভেন এন্টারপ্রাইজ অ্যাপ্লিকেশনটি নির্বাচন করুন এবং পরবর্তী টিপুন>> যুদ্ধ, ইজবি এবং সেটিংস উভয়ের জন্য প্রকল্পের নাম জিজ্ঞাসা করুন।

আইডিই স্বয়ংক্রিয়ভাবে আপনার জন্য কাঠামো তৈরি করবে।


আমি আপনার সাথে সম্মত হই, বিশেষত যখন JEE6 নির্দিষ্টকরণের সাথে মেনে চলি
Sym-Sym

3

এটি ম্যাভেন-কান-প্লাগইন অংশের একটি ভাল উদাহরণ

উদাহরণস্বরূপ উপলব্ধ মভেন আরকিটাইপগুলিও পরীক্ষা করে দেখতে পারেন । আপনি যদি কেবল এমভিএন আরকিটাইপ নষ্ট করেন: জেনারেট করুন আপনি উপলব্ধ প্রত্নতাত্ত্বিক ধরণের একটি তালিকা পাবেন। এর মধ্যে একটি হ'ল

maven-archetype-j2ee-simple

10
maven-archetype-j2ee-simpleকাঠামোতে অহেতুক জটিল মনে হয় - বিশেষত মডিউলগুলির ভিতরে মডিউলগুলি এবং লগিংয়ের মতো জিনিসের জন্য পৃথক মডিউল। আমি এই কাঠামোর পিছনে যুক্তি বুঝতে পারি নি
বিহং

3

আমি সম্পূর্ণ মেভেন-ভিত্তিক কানের প্যাকেজযুক্ত অ্যাপ্লিকেশনটির শেষ থেকে শেষের জন্য উচ্চ এবং নিম্ন সন্ধান করছি এবং অবশেষে এটিকে হোঁচট খেয়েছি । নির্দেশাবলীতে বলা হয় সিএলআইয়ের মধ্য দিয়ে চলাকালীন বিকল্প 2 নির্বাচন করতে হবে তবে আপনার উদ্দেশ্যে, বিকল্প 1 ব্যবহার করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.