سؤال

أنا أقوم بتشغيل مشروع له اعتماد على Groovy 1.7-Beta-1. يستخدم البرنامج المساعد GMaven الإصدار التالي 1.6 كاعتمالة. في POM الخاص بي، أحدد في قسم إدارة التبعية The Grooyv - جميع الإصدار باسم:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>1.7-beta-1</version>
        </dependency>
    </dependencies>
</dependencyManagement>

ومع ذلك، عندما أقوم بتشغيل Maven في وضع تصحيح الأخطاء، أرى أن 1.6 Groovy يستخدم في الاعتماد على البرنامج المساعد Gmaven. اعتقدت أن قسم إدارة التبعية الخاص بي سيتجاوز ذلك حتى يستخدم جميعا 1.7-Beta-1، لكنني أحصل على أخطاء بسبب الإصدارات المختلفة المزودة. أي مساعدة هنا موضع تقدير.

شكرا،

جيف

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

المحلول

إليك نسخة مكررة من إجابة Pascal. قمت بترقية إصدار البرنامج المساعد الرئيسي إلى 1.2، والتمييز إلى Groovy 1.7، وأفصل كل شيء في علامة مكونة دون حساب بحيث سيستفيد بشكل جيد نموذج الميراث.

ضع في اعتبارك أن 1.3 لقطة من البرنامج المساعد GMaven قد بدأ بالفعل في استخدام المزود 1.7-RC2 Groovy.

<!-- I wrapped everything in a plugin management section so that this can be neatly inherited across all your poms -->
<pluginManagement>
  <plugins>
    <plugin>
      <groupId>org.codehaus.gmaven</groupId>
      <artifactId>gmaven-plugin</artifactId>
      <!-- Notice I upgraded it to 1.2 -->
      <!-- Details here http://repo1.maven.org/maven2/org/codehaus/gmaven/gmaven-plugin/1.2/gmaven-plugin-1.2.pom -->
      <version>1.2</version>
      <dependencies>
        <dependency>
          <groupId>org.codehaus.gmaven.runtime</groupId>
          <artifactId>gmaven-runtime-1.7</artifactId>
          <version>1.2</version>
        </dependency>
      </dependencies>
    </plugin>
  </plugins>
</pluginManagement>

نصائح أخرى

إن تجاوز التبعية المستخدمة من قبل البرنامج المساعد هو قدرة جميلة تم تقديمها بالفعل من قبل Maven 2.0.9.

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

<plugin>
  <groupId>org.codehaus.groovy.maven</groupId>
  <artifactId>gmaven-plugin</artifactId>
  <version>1.0</version>
  <executions>
    <execution>
      <goals>
        <goal>generateStubs</goal>
        <goal>compile</goal>
        <goal>generateTestStubs</goal>
        <goal>testCompile</goal>
      </goals>
    </execution>
  </executions>
  <dependencies>
    <dependency>
      <groupId>org.codehaus.groovy</groupId>
      <artifactId>groovy-all</artifactId>
      <version>1.7-beta-1</version>
    </dependency>
  </dependencies>
</plugin>

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

لجعل Gmaven يختار بدقة الوقت الأجر المناسب هو تكوين قيمة "مفصلات الخدمات الافتراضية"، على سبيل المثال

<plugin>
    <groupId>org.codehaus.gmaven</groupId>
    <artifactId>gmaven-plugin</artifactId>
             <configuration>
                 <providerSelection>1.7</providerSelection>
             </configuration>

لمعلوماتك، ل groovy:providers mojo, هذه هي التكوينات التي تتوقعها (استخراجتها عن طريق تصحيح الأخطاء org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(List, Stack, MavenSession, MavenProject) (ابحث عن XmlPlexusConfiguration):

<configuration>
 <remoteRepositories implementation="java.util.List">${project.pluginArtifactRepositories}</remoteRepositories>
 <project implementation="org.apache.maven.project.MavenProject">${project}</project>
 <artifactRepository implementation="org.apache.maven.artifact.repository.ArtifactRepository">${localRepository}</artifactRepository>
 <pluginArtifactMap implementation="java.util.Map">${plugin.artifactMap}</pluginArtifactMap>
 <providerSelection implementation="java.lang.String">${gmaven.runtime}</providerSelection>
</configuration>

تحتاج إلى إضافة تبعية مشابهة 1.7 إلى تبعيات البرنامج المساعد في منظمة مماثلة <plugin> أو <pluginManagement> الجزء. قسم إدارة التبعية لديك هو مناسب، ولكن لا يؤثر على تبعيات البرنامج المساعد. سأحاول مراجعة هذا الرد ونشر مثال لاحقا عندما أعود إلى مكتبي.

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