سؤال

قرأت بعض الوظائف المفيدة هنا حول أسئلة Maven السابقة، أنا مهتم جدا حاليا بتعلم Maven (لأنني أحب ذلك ولأن مدربي يتطلبني). أنا أقرأ حاليا [هذا] [1]، وأنا أعمل في طريقي حوض أمثلة. إنه كتاب مباشر ولكنه يحتوي على بعض الأخطاء في الداخل (منها تافهة)، ومع ذلك، قد يكون من الصعب تثبيت مبتد بالنسبة إلى Newbie مثلي، ويمكن تثبيته مرة واحدة بسهولة. هل هناك أي كتاب آخر أفضل لفهم مافن من أعلى إلى أسفل؟

الجزء الثاني من السؤال يتعلق بالمثال في هذا الكتاب، وربما تفسيرات بسيطة ستحل شكوكي.

هنا هو الشيء، صنعت simple-weather مشروع في Java الذي يسترجع الظروف الجوية من خادم الطقس Yahoo، بالنظر إلى الرمز البريدي المعين بإرجاع معلومات الطقس.

ثم قمت بإجراء "بسيطة ويب" (مع Maven وكذلك الواحد أعلاه نسيت أن أذكر ذلك)، وهو مشروع ويب أساسي يحتوي على بعض التقدم الافتراضي موجود بالفعل مع Maven ولا يفعل شيئا.

ولدي بعض parent-project أريد دمج هذين المشروعين في واحد، لذلك قمت بإجراء Pom.xml الذي يحتوي على وحدات 2، 1 لاسترداد المعلومات (مشروع Java) وغيرها لعرضه على الويب (تطبيق الويب).

لقد جعلت كل شيء يعمل في النهاية، لكن هنا هو الشيء الغريب .. إذا قمت بإجراء عرض WebApp أي سلسلة "اسم" اسم "يتيح القول ثم بناءه بشكل مستقل، فإنه يقوم بالطباعة بالضبط تلك السلسلة. ولكن عندما أضع WebApp في "Prother-Project" وتغيير هذه السلسلة إلى "Name1" وإنشاءها كوحدة فرعية خاصة بالمشروع .. لا شيء يتغير ..

لذلك أعود إلى هذه النقطة، نظرا لأن WebApp بسيط يعتمد على الطقس البسيط لا يمكنني بناءه بعد الآن من تلقاء نفسه، فهذا الآن إذا أريد إجراء بعض التغييرات في WebApp .. قم بتعديل WebApp خارج "الوالدين مشروع "بناء عليه هناك ثم يعيده إلى مشروع الوالدين، ثم تطبق التغييرات، لماذا هذا، لماذا لا يمكنني تغيير محتوى Servlet / أو إضافة واحدة مباشرة في WebApp كجزء من" الأصل -المشروع"؟

شكرا لك .. أعرف سؤال طويل وممل، لكنني أحاول فقط أن أتعلم الأشياء وليس هناك مكان أفضل لسؤاله منه هنا: D

تحرير - فيما يلي ملفات POM لكل مشروع:

1. بسيطة الوالد pom.xml

 <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>org.sonatype.mavenbook.multi</groupId>
    <artifactId>simple-parent</artifactId>
    <packaging>pom</packaging>
    <version>1.0</version>
    <name>Multi Chapter Simple Parent Project</name>
<modules>
<module>simple-weather</module>
<module>simple-webapp</module>
</modules>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

2. الطقس بسيط pom.xml

<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>
<parent>
<groupId>org.sonatype.mavenbook.multi</groupId>
<artifactId>simple-parent</artifactId>
<version>1.0</version>
</parent>
<artifactId>simple-weather</artifactId>
<packaging>jar</packaging>
<name>Multi Chapter Simple Weather API</name>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.5</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

3. بسيطة ويب pom.xml

<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>
<parent>
<groupId>org.sonatype.mavenbook.multi</groupId>
<artifactId>simple-parent</artifactId>
<version>1.0</version>
</parent>
<artifactId>simple-webapp</artifactId>
<packaging>war</packaging>
<name>simple-webapp Maven Webapp</name>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.sonatype.mavenbook.multi</groupId>
<artifactId>simple-weather</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<build>
<finalName>simple-webapp</finalName>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
هل كانت مفيدة؟

المحلول

لست متأكدا من فهم سؤالك تماما. ومع ذلك، دعنا نشرح بعض المبادئ في مافن.

لذلك لديك مثل هذا الهيكل:

parent
  + simple-weather
  + simple-webapp

على وجهة نظر مافن، لدينا 3 مشاريع هنا:

  • الأبوين, ، وهو pom المشروع (أي لها packaging تم تعيين السمة إلى pom)
  • بسيط الطقس, ، وهو jar مشروع و الأبوين كما الوالد.
  • بسيطة ويب, ، وهو war مشروع، لديه الأبوين كما الوالد و بسيط الطقس كما الاعتماد.

تستخدم المشاريع الأصل مفهومين في Maven:

  • الميراث، الذي يقول أن كل أطفاله (بسيط الطقس و بسيطة ويبهل ورث كل ممتلكاته (هذا المفهوم هو نفس الشيء تقريبا extends في جاوة).
  • التجميع، الذي يعرف عن طريق تعريف <modules>. وبعد التجميع يعني أنه سيتم تشغيل كل أمر يتم تشغيله في المشروع على كل منهما module.

ماذا يحدث إذا قمت ببناء (باستخدام mvn clean install) على ال الأبوين الدليل؟

  1. سوف Maven "ترجمة" الأبوين مشروع ثم ثبيت pom.xml في مستودع المحلي.
  2. سوف مافن تجميع بسيط الطقس المشروع، ولكن كما أن لديه أحد الوالدين، ستبدو MAVEN أن ملف POM.XML الوالد في المستودع المحلي. بمجرد إنشاء الجرة، يتم تثبيته في المستودع المحلي.
  3. سوف مافن في النهاية تجميع بسيطة ويب المشروع. سوف يرفع مافن نفس الشيء للوالد pom.xml، ولكن أيضا ل بسيط الطقس المشروع.

يتم توضيح الموقع الموضح في النقطة الثالثة: إذا كنت ترغب في بناء بسيطة ويب مشروع، مافن سوف دائما حاول أن تجد كل تبعياته - بما في ذلك بسيط الطقس - من مستودع المحلي (أو البعيد).

لهذا السبب إذا كنت تبني فقط بسيطة ويب بدون بناء والتثبيت بسيط الطقس, ، لن تجد Maven المشروع الأخير، أو سيجد نسخة قديمة.

لذلك لتلخيص، عند العمل على مشروع متعدد الوحدات النمطية مع Maven، حاول دائما تشغيل أوامر البناء وتثبيتها من الدليل الجذر (أو الأصل).

آمل أن يكون هذا التفسير واضحا بما فيه الكفاية ويساعدك على فهم ما يحدث في قضيتك. لا تتردد في طلب المزيد من المعلومات ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top