سؤال

أحاول تقسيم مشروع حرب Maven إلى وحدتين ، حتى أتمكن من إنشاء ملف JAR منفصل مع أدوات سطر الأوامر. النتيجة لها الهيكل التالي:

  • pom.xml (العبوة pom, ولديه وحدتان)
  • project-jar/
    • pom.xml (العبوة jar)
  • project-war/
    • pom.xml (العبوة war, ، يعتمد على project-jar)

إذا ركضت mvn أوامر من الجذر ، كل شيء يعمل بشكل جيد. أود الاستمرار في استخدام mvn jetty:run, ، لكن لذلك ، أحتاج إلى تنفيذ الأمر في مشروع الحرب الفرعي. إذا فعلت ذلك ، فشك في العثور على project-jar المشروع الفرعي ، لذلك لن يتم تشغيله. حتى mvn jetty:run-war مع ملف حرب تم تجميعه بالكامل في target فشل الدليل ، لأنه يحاول أولاً "بناء" المشروع. لقد تمكنت فقط من جعلها تعمل عن طريق التثبيت project-jar في مستودع Maven المحلي ، وهو ليس لطيفًا جدًا.

هل هناك طريقة لاستخدام المكون الإضافي الرصيف في تكوين Maven متعدد الوحدات؟

هل كانت مفيدة؟

المحلول

لا يوجد حل سحري والوحيد الذي أعرفه هو الاختراق بعض الشيء ويعتمد على extraClasspath العنصر الذي يمكنك استخدامه لإعلان أدلة فئة إضافية نسبيًا. مثل هذا (من Jetty-662):

<plugin>
  <groupId>org.mortbay.jetty</groupId>
  <artifactId>jetty-maven-plugin</artifactId>
  <version>7.0.1.v20091125</version>
  <configuration>
    <scanIntervalSeconds>10</scanIntervalSeconds>
    <webAppConfig>
      <contextPath>/my-context</contextPath>
      <extraClasspath>target/classes;../my-jar-dependency/target/classes</extraClasspath>
    </webAppConfig>
    <scanTargets>
      <scanTarget>../my-jar-dependency/target/classes</scanTarget>
    </scanTargets>
  </configuration>
</plugin>

نصائح أخرى

قم بإنشاء ملف تعريف داخل وحدة الحرب (project-war). ضمن هذا الملف الشخصي ، قم بتكوين الرصيف لترفع مرحلة دورة الحياة وتنفيذ run الهدف بشكل صريح. الآن عندما يمتد Maven من مشروع Toplevel مع تمكين هذا الملف الشخصي ، فإنه سوف يستدعي Jetty: Run وابتعاد دقة التبعية للوحدة الشقيقة (كما هو معتاد عند تنفيذ أوامر Maven من مشروع Toplevel).

تكوين المثال ، عند وضعه في pom.xml من وحدة الويب (project-war) ، يرتب لصالح الرصيف: الجري للتنفيذ خلال test مرحلة. (يمكنك اختيار مرحلة أخرى ، ولكن تأكد من أنها بعد ذلك compile.)

يركض من Toplevel: mvn test -Pjetty-run أو mvn test -DskipTests=true -Pjetty-run. سيؤدي ذلك إلى تجميع التبعيات كما هو مطلوب وجعلها متوفرة ولكن استدعاء رصيف: قم بتشغيل داخل الوحدة النمطية الصحيحة.

<profiles>
  ...
  <!-- With this profile, jetty will run during the "test" phase -->
  <profile>
    <id>jetty-run</id>
    <build>
      <plugins>
        <plugin>
          <groupId>org.mortbay.jetty</groupId>
          <artifactId>jetty-maven-plugin</artifactId>
          <version>7.1.6.v20100715</version>
          <configuration>
            ...
            <webAppSourceDirectory>
              ${project.build.directory}/${project.build.finalName}
            </webAppSourceDirectory>
            ...
          </configuration>
          <executions>
            <execution>
              <id>jetty-run</id>
              <phase>test</phase>
              <goals>
                <goal>run</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </build>
  </profile>
...
</profiles>

استخدام outsaclasspath في تكوين الرصيف يعمل ... ولكن لسبب ما ، إذا كانت الجرار التابعة (من الوحدات النمطية الأخرى) عفا عليها الزمن لن تعمل بعض الأشياء بشكل صحيح.

أضف المكون الإضافي رصيف إلى جذر POM وتكوين ContexThandler يشير إلى الحرب المطلوبة. هذا يعمل بالنسبة لي في مشروع مع وحدات جرة متعددة وحربين تراكب.

<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.3.0.M2</version>
<configuration>
        <scanIntervalSeconds>10</scanIntervalSeconds>
        <contextHandlers>
            <contextHandler
                implementation="org.eclipse.jetty.maven.plugin.JettyWebAppContext">
                <war>${project.basedir}/project-war/target/project-war-${project.version}.war</war>
                <contextPath>/</contextPath>
            </contextHandler>
        </contextHandlers>
    </configuration>
</plugin>

http://eclipse.org/jetty/documentation/current/jetty-maven-plugin.html#running-more-than-one-webapp

أعلم أنك تطلب تكوين البرنامج المساعد ، ولكن يمكنك فقط تحديد المشروع في أمر Maven:

$ mvn jetty:run --projects project-war
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top