Невозможно добавить classpath в MANIFEST.MF в maven2 - PullRequest
1 голос
/ 10 августа 2010

Я пытаюсь добавить путь к классу в MANIFEST.MF в maven2 с помощью следующего кода, но он не может его добавить.

<build>
  <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <configuration>
            <source>1.5</source>
            <target>1.5</target>
            <manifest>
              <addClasspath>true</addClasspath>
              <useUniqueVersions>false</useUniqueVersions>
            </manifest>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
   <finalName>iHubServiceImpl</finalName>
</build>

Не могли бы вы мне помочь.


Обновление: Ниже обновленного 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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.adp.ihub</groupId>
    <artifactId>PreFinal</artifactId>
    <version>1</version>
  </parent>
  <groupId>com.adp.ihub</groupId>
  <artifactId>iHubCommon</artifactId>
  <version>1</version>
  <packaging>jar</packaging>
  <name>iHubCommon</name>
  <url>http://maven.apache.org</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>2.3.1</version>
          <configuration>
            <archive>
              <manifest>
                <addClasspath>true</addClasspath>
                <classpathLayoutType>simple</classpathLayoutType>
              </manifest>
              <manifestEntries>
                <mode>development</mode>
                <url>${pom.url}</url>
                <key>value</key>
              </manifestEntries>
            </archive>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <!-- Use the jar plugin for plugin management configuration to take effect -->    
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
      </plugin>
    </plugins>
    <sourceDirectory>${basedir}/src</sourceDirectory>
    <resources>
      <resource>
        <directory>${basedir}/src</directory>
        <excludes>
          <exclude>**/*.java</exclude>
          <exclude>**/pom*</exclude>
        </excludes>
      </resource>
    </resources>
    <finalName>iHubCommon</finalName>
  </build>
  <dependencies>
    <dependency>
      <groupId>com.adp.ihub</groupId>
      <artifactId>BizLogic3</artifactId>
      <version>1</version>
      <scope>system</scope>
      <systemPath>${PWD}/iHUBCM/Environment/lib/BizLogic3.jar</systemPath>
    </dependency>
    <dependency>
      <groupId>com.adp.ihub</groupId>
      <artifactId>EncryptionAPI-jdk15-0.4</artifactId>
      <version>1</version>
      <scope>system</scope>
      <systemPath>${PWD}/iHUBCM/Environment/lib/EncryptionAPI-jdk15-0.4.jar</systemPath>
    </dependency>
    <dependency>
      <groupId>com.adp.ihub</groupId>
      <artifactId>adpbod-1.0</artifactId>
      <version>1</version>
      <scope>system</scope>
      <systemPath>${PWD}/iHUBCM/Environment/lib/adpbod-1.0.jar</systemPath>
    </dependency>
  </dependencies>
</project>

Но я все еще не получаю записи в моем manifest.mf.что не так?

Ответы [ 2 ]

4 голосов
/ 10 августа 2010

К Добавить запись пути к классу в манифест , вам необходимо указать подключаемому плагину Maven Jar, добавив элемент <archive> с соответствующей конфигурацией. Из Настройка манифеста (слегка адаптировано):

Настройка манифеста

Манифест по умолчанию может быть изменен с конфигурацией архива элемент. Ниже вы найдете некоторые из параметры конфигурации, которые имеется в наличии. Для получения дополнительной информации см Maven Ссылка на архиватор. Эта версия Плагин Maven JAR использует Maven Archiver 2.4.

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.3.1</version>
        <configuration>
          <archive>
            <index>true</index>
            <manifest>
              <addClasspath>true</addClasspath>
            </manifest>
            <manifestEntries>
              <mode>development</mode>
              <url>${pom.url}</url>
              <key>value</key>
            </manifestEntries>
          </archive>
        </configuration>
        ...
      </plugin>
    </plugins>
  </build>
  ...
</project>

Но проблема в вашем случае заключается в том, что вы (ab) используете evil system scope , который по определению предназначен для зависимостей, которые, как предполагается, всегда равны доступны и не найдены в хранилище . Поэтому не ожидайте, что Maven поместит их в запись Class-Path в Manifest.mf.

Полагаю, Я никогда не повторю достаточно , что люди не должны его использовать system Зависимые области, но их использование настоятельно не рекомендуется :

system : эта зависимость требуется на некотором этапе жизненного цикла вашего проекта, но зависит от системы. Использование этой области не рекомендуется: эта функция считается «продвинутой» и должна использоваться только в том случае, если вы действительно понимаете все последствия ее использования, что может быть чрезвычайно трудно, если вообще невозможно определить количественно, Эта область по определению делает вашу сборку непереносимой. Это может быть необходимо в определенных крайних случаях. В системную область входит элемент <systemPath>, который указывает на физическое расположение этой зависимости на локальном компьютере. Таким образом, он используется для ссылки на некоторый артефакт, который, как ожидается, будет присутствовать на данном локальном компьютере, а не в репозитории; и чей путь может варьироваться от машины к машине. Элемент systemPath может ссылаться на переменные среды в своем пути: например, ${JAVA_HOME}.

Либо установите свои jar-файлы в локальный репозиторий, либо используйте корпоративный репозиторий, либо используйте файловый репозиторий . Но не используйте область действия system.

0 голосов
/ 10 августа 2010

Плагин компилятора maven не говорит об атрибуте конфигурации, называемом "манифест", вы можете использовать плагин maven-jar-plugin. См. эту ссылку о том, как это сделать.

Edit: Когда вы используете pluginManagement для настройки плагинов, вам нужно использовать плагин в элементах. См. документация

<build>
   <pluginManagement>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.3.1</version>
            <configuration>
               <archive>
                  <manifest>
                     <addClasspath>true</addClasspath>
                  </manifest>
                  <manifestEntries>
                     <mode>development</mode>
                     <url>${pom.url}</url>
                     <key>value</key>
                  </manifestEntries>
               </archive>
            </configuration>
         </plugin>
     </plugins>
  </pluginManagement>

  <plugins>
      <!-- Use the jar plugin for plugin management configuration to take effect -->
      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-jar-plugin</artifactId>
      </plugin>
  </plugins>
</build>  

Тип консоли:

$>mvn jar:jar

Изменить использовать этот 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/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <groupId>com.adp.ihub</groupId>
   <artifactId>PreFinal</artifactId>
   <version>1</version>
   <packaging>jar</packaging>

   <name>PreFinal</name>
   <url>http://maven.apache.org</url>

   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>

   <dependencies>
      <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>3.8.1</version>
         <scope>test</scope>
      </dependency>

      <!-- !!! ADD YOUR DEPENDENCIES HERE !!! -->
   </dependencies>

   <build>
      <pluginManagement>
         <plugins>
            <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-jar-plugin</artifactId>
               <version>2.3.1</version>
               <configuration>
                  <archive>
                     <manifest>
                        <addClasspath>true</addClasspath>
                     </manifest>
                     <manifestEntries>
                        <mode>development</mode>
                        <url>${pom.url}</url>
                        <key>value</key>
                     </manifestEntries>
                  </archive>
               </configuration>
            </plugin>
         </plugins>
      </pluginManagement>

      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
         </plugin>
      </plugins>
   </build>
</project>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...