سؤال

يطبق واصف التجميع الخاص بي التضمينات والاستثناءات بشكل صحيح عندما يتم تضمين التبعيات في ملف pom مباشرةً.

ومع ذلك، عندما أضع التبعيات في ملف pom الأصلي، يُبلغ هدف التجميع: الدليل أنه لم يتم تشغيل عمليات التضمين والاستثناءات.

هل تعرف لماذا يتجاهل البرنامج المساعد maven-assembly تبعيات الوالدين؟كيف يمكنني إصلاح ذلك؟

فيما يلي واصفات التجميع والتجميع:

واصف التجميع:

<assembly>
  <id>distribution</id>
  <formats>
    <format>zip</format>
  </formats>
  <fileSets>
    <fileSet>
      <includes>
        <include>readme.txt</include>
      </includes>
    </fileSet>
    <fileSet>
      <directory>target</directory>
      <outputDirectory>/lib</outputDirectory>
      <includes>
        <include>*.jar</include>
      </includes>
    </fileSet>
  </fileSets>
  <dependencySets>
    <dependencySet>
      <outputDirectory>/lib</outputDirectory>
      <unpack>false</unpack>
      <scope>runtime</scope>
      <excludes>
        <exclude>org.tanukisoftware:wrapper:exe:3.3.5</exclude>
      </excludes>
    </dependencySet>
    <dependencySet>
      <outputDirectory>/bin</outputDirectory>
      <unpack>false</unpack>
      <scope>runtime</scope>
      <includes>
        <include>org.tanukisoftware:wrapper:exe:3.3.5</include>
      </includes>
    </dependencySet>
  </dependencySets>
</assembly>

تعريف البرنامج المساعد لتجميع POM الفرعي:

    <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
            <ignoreDirFormatExtensions>true</ignoreDirFormatExtensions>
            <descriptors>
                <descriptor>assembly.xml</descriptor>
            </descriptors>
        </configuration>
        <executions>
            <execution>
                <id>make-assembly</id>
                <phase>package</phase>      
                <goals>
                    <goal>directory</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

تبعيات POM الأصلية:

<dependencies>
    <dependency>
        <groupId>org.tanukisoftware</groupId>
        <artifactId>wrapper</artifactId>
        <version>3.3.5</version>
        <type>dll</type>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.tanukisoftware</groupId>
        <artifactId>wrapper</artifactId>
        <version>3.3.5</version>
        <type>exe</type>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.tanukisoftware</groupId>
        <artifactId>wrapper</artifactId>
        <version>3.3.5</version>
        <scope>runtime</scope>
    </dependency>
</dependencies>

التحذيرات في تقرير البناء:

[assembly:directory {execution: make-assembly}]
Reading assembly descriptor: assembly.xml
Processing DependencySet (output=/lib)
[WARNING] The following patterns were never triggered in this artifact exclusion filter:
o  'org.tanukisoftware:wrapper:exe:3.3.5'

Processing DependencySet (output=/bin)
[WARNING] The following patterns were never triggered in this artifact inclusion filter:
o  'org.tanukisoftware:wrapper:exe:3.3.5'
هل كانت مفيدة؟

المحلول

لا أعرف ما إذا كان هذا سيساعد، ولكن ما أفعله دائمًا هو وضع التبعيات في كتلة إدارة التبعيات؛

    <dependencyManagement>
    <!-- dependencies with exclusions -->
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>

            <version>${version.springframework}</version>

            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

بعد ذلك، في pom الفرعي، قم بإدراج التبعيات مرة أخرى، ولكن بدون الإصدار والاستثناءات

  <dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
    </dependency>

لكن لأكون صادقًا، في تجميعي الأول والوحيد، لم أتمكن من تشغيله في وحدة فرعية ووضعه في قائمة الوالدين.هذا هو ملف التجميع الخاص بي، لإنشاء ملف مضغوط لبرنامج جافا مستقل، يتم تشغيله بواسطة cron:

<?xml version="1.0" encoding="UTF-8"?>

<assembly>
  <id>${project.layer}-both</id>

  <formats>
      <format>zip</format>
  </formats>

  <includeBaseDirectory>false</includeBaseDirectory>

  <baseDirectory>/</baseDirectory>

  <moduleSets>
      <moduleSet>
          <includes>
              <include>edu.berkeley.ist.cars:cars_upload</include>
          </includes>

          <binaries>
              <unpack>false</unpack>
              <useStrictFiltering>true</useStrictFiltering>
              <includeDependencies>true</includeDependencies>
              <outputDirectory>upload</outputDirectory>
          </binaries>
      </moduleSet>

      <moduleSet>
          <includes>
              <include>edu.berkeley.ist.cars:cars_download</include>
          </includes>

          <binaries>
              <unpack>false</unpack>
              <useStrictFiltering>true</useStrictFiltering>
              <includeDependencies>true</includeDependencies>
              <outputDirectory>download</outputDirectory>
          </binaries>
      </moduleSet>
  </moduleSets>

  <!--
      crontab.txt is put in twice, in both upload and download, just in case.
      -->
  <files>
      <!-- upload files -->
      <file>
          <source>src/stuff/scripts/cars_upload.sh</source>
          <lineEnding>unix</lineEnding>
          <filtered>true</filtered>
          <outputDirectory>upload</outputDirectory>
      </file>

      <file>
          <source>src/stuff/notes/crontab-${project.layer}.txt</source>
          <destName>crontab.txt</destName>
          <lineEnding>unix</lineEnding>
          <filtered>true</filtered>
          <outputDirectory>upload</outputDirectory>
      </file>

      <!-- download files -->
      <file>
          <source>src/stuff/scripts/cars_download.sh</source>
          <lineEnding>unix</lineEnding>
          <filtered>true</filtered>
          <outputDirectory>download</outputDirectory>
      </file>

      <file>
          <source>src/stuff/notes/crontab-${project.layer}.txt</source>
          <destName>crontab.txt</destName>
          <lineEnding>unix</lineEnding>
          <filtered>true</filtered>
          <outputDirectory>download</outputDirectory>
      </file>
  </files>
</assembly>

يوجد دليلان للمستوى الأعلى في الملف المضغوط، التحميل والتنزيل.

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