0

Вот мой pom.xmlMaven 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> 
    <url>http://maven.apache.org</url> 

    <name>SomeProject</name> 

    <groupId>com.test.te</groupId> 
    <artifactId>testjar</artifactId> 
    <version>1.1.6</version> 
    <packaging>jar</packaging> 

    <dependencies> 
    .... 
    .... 
    </dependencies> 
    <build> 

     <resources> 
      <resource> 
       <directory>src/main/java</directory> 
       <includes> 
        <include>**/*.conf</include> 
        <include>**/*.java</include> 
       </includes> 
      </resource> 
     </resources> 

     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
       </configuration> 
       <executions> 
        <execution> 
         <id>drive</id> 
         <goals><goal>jar</goal></goals> 
          <phase>install</phase> 
          <configuration> 
           <finalName>driver</finalName> 
           <includes> 
            <include>com/test/te/p1/*.java<include> 
            <include>com/test/te/p1/*.class</include> 
           </includes> 
          </configuration> 
         </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

Вот как я выполнении этого

mvn clean install 

Вот последние несколько строк вывода сборки в.

[INFO] [jar:jar {execution: default-jar}] 
[INFO] Building jar: /home/mycp/workspace/SomeProject/target/testjar-1.1.6.jar 
[INFO] [install:install {execution: default-install}] 
[INFO] Installing /home/mycp/workspace/SomeProject/target/testjar-1.1.6.jar to /home/mycp/.m2/repository/com/test/te/testjar/1.1.6/testjar-1.1.6.jar 
[INFO] [jar:jar {execution: driver}] 
[INFO] Building jar: /home/mycp/workspace/TestProject/target/driver.jar 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESSFUL 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 11 seconds 
[INFO] Finished at: Wed Oct 28 17:27:10 IST 2015 
[INFO] Final Memory: 129M/888M 
[INFO] ------------------------------------------------------------------------ 
  • Почему второй сосуд (driver.jar) не версируются (водитель-1.1.6.jar)?
  • Почему 2-я банка не установлена ​​в местном репо?

Как это сделать?

Мое требование создать две банки testjar - $ {project.version} .jar водитель - $ {project.version} .jar и установить эти два в двух разных артефакта

/дома/mycp /. м2/repossitory/ком/тест/тэ/testjar/$ {проект-версия}/testjar - $ {project.version} .jar

/home/mycp/.m2/repossitory/com/test/te//$ {project-version}/водитель - $ {project.version} .jar

+0

ПОМ вы испытываете очень неправильно. Какую проблему вы пытаетесь решить здесь? – Tunaki

+0

Мне нужно создать две банки из одного проекта. Оба должны быть версиями и перенесены в местное репо. – Nageswaran

+0

Проще говоря, из этого проекта мне нужно создать testjar-1.1.6.jar и driver-1.1.6.jar – Nageswaran

ответ

3

Почему 2-я банка (driver.jar) не является версией (driver-1.1.6.jar)?

Это потому, что вы явно сказали maven-jar-plugin, что его имя должно быть driver с <finalName>driver</finalName>. Если вы хотите добавить версию, вам потребуется следующая конфигурация: <finalName>driver-${project.version}</finalName>.

Почему 2-я банка не установлена ​​в местном репо?

Это потому, что вы указали фазу <phase>install</phase>, поэтому он будет выполнен после default-install исполнения, который является выполнением, которое устанавливает артефакт в локальное хранилище. Вместо этого вы должны привязать это выполнение к фазе package.


Это конфигурация, которую вы должны иметь для maven-jar-plugin. Классификатор необходим для создания другой банки.

<execution> 
    <id>drive</id> 
    <goals> 
    <goal>jar</goal> 
    </goals> 
    <phase>package</phase> 
    <configuration> 
    <finalName>driver-${project.version}</finalName> 
    <classifier>classifier</classifier> 
    <includes> 
     <include>com/test/te/p1/*.java</include> 
     <include>com/test/te/p1/*.class</include> 
    </includes> 
    </configuration> 
</execution> 

Как примечание стороны, я заметил, что вы настроили <resources> элемент в вашем ПОМ, включая Java и конф файлы. У вас не должно быть этого. В частности: все ресурсы должны быть помещены под src/main/resources и все файлы Java под src/main/java. Тогда нет необходимости в этой конфигурации.


Исходя из комментариев, если вы не можете добавить классификатор, то вам придется отказаться от maven-jar-plugin и использовать maven-assembly-plugin вместо этого. Это простой дескриптор сборки, который поможет вам начать работу. Поместите этот файл под src/main/assembly/assembly.xml.

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd"> 
    <id>driver</id> 
    <formats> 
     <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <dependencySets> 
     <dependencySet> 
      <useProjectArtifact>true</useProjectArtifact> 
      <unpackOptions> 
       <includes> 
        <include>com/test/te/p1/*.class</include> 
       </includes> 
      </unpackOptions> 
      <unpack>true</unpack> 
     </dependencySet> 
    </dependencySets> 
</assembly> 

со следующей конфигурацией в POM:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.5.5</version> 
    <configuration> 
     <descriptors> 
      <descriptor>src/main/assembly/assembly.xml</descriptor> <!-- point to the location of the assembly.xml file in your project structure --> 
     </descriptors> 
     <appendAssemblyId>false</appendAssemblyId> 
     <finalName>driver-${project.version}</finalName> 
    </configuration> 
    <executions> 
     <execution> 
      <phase>prepare-package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 
+0

И если я удаляю тег ресурсов, то как я могу добавить * .java файлы в jar. – Nageswaran

+0

Файлы @Surendhar '.java' не должны находиться в банке. Только скомпилированные классы идут туда. Если вы хотите упаковать источники приложений, это другое дело. – Tunaki

+0

Это действительно помогло. Тем не менее у меня еще две проблемы. Одна из них - иерархия пакетов. Внутри контейнера для драйверов есть папка с именем driver, в которой есть папка com, но я хочу, чтобы папка com с папкой META-INF. Второй вопрос заключается в том, что он не устанавливает банку для местного artifactory. – Nageswaran