Question Comment enregistrer un fichier jar personnalisé comme artefact principal maven?


J'ai un projet prévu pour livrer un fichier jar:

<packaging>jar</packaging>

mais le jar est construit de manière personnalisée, donc l'emballage par défaut fait avec jar: jar a été désactivé

<plugin>
  <artifactId>maven-jar-plugin</artifactId>
  <version>2.3.2</version>
  <executions>
    <execution>
      <id>default-jar</id>
      <phase>none</phase>
    </execution>
  </executions>
</plugin>

mais alors quand je veux appliquer la nuance: ombre sur le pot existant je reçois une erreur

L'artefact principal du projet n'existe pas.

Je suppose que maven ne connaît pas le fichier .jar créé par mon outil personnalisé. Comment le faire savoir, car antrun attachArtifact ne fonctionne pas

<attachartifact file="./bin/classes.jar" classifier="" type="jar"/>

l'erreur que je reçois est

Une exception Ant BuildException est survenue: org.apache.maven.artifact.InvalidArtifactRTException: For artefact {: jar}: un artefact attaché doit avoir un identifiant différent de son artefact principal correspondant.

Donc ce n'est pas la méthode pour enregistrer l'artefact principal ... Y a-t-il (sans écrire le plugin Java personnalisé)?

Merci, Lukasz


10
2018-05-04 12:54


origine


Réponses:


Quelque chose comme ça

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.8</version>
    <executions>
        <execution>
            <id>attach-artifacts</id>
            <phase>package</phase>
            <goals>
                <goal>attach-artifact</goal>
            </goals>
            <configuration>
                <artifacts>
                    <artifact>
                        <file>${basedir}/bin/classes.jar</file>
                        <type>jar</type>
                    </artifact>
                </artifacts>
            </configuration>
        </execution>
    </executions>
</plugin>

1
2018-04-24 19:40



Alors que votre solution peut fonctionner pour une construction à la phase d'installation + ou lorsqu'il n'y a pas de dépendances dans le réacteur, dans les cas où la construction en phase de compilation ou de test ne comprend pas les dépendances. Construire à compiler se produit lorsque vous utilisez des plug-ins tels que maven-release-plugin.

Extension de la solution choisie pour identifier les classes décompressées lors de la compilation

<plugin>
  <groupId>org.codehaus.gmaven</groupId>
  <artifactId>gmaven-plugin</artifactId>
  <version>1.3</version>
  <executions>
    <execution>
      <id>set-main-artifact-compile</id>
      <phase>compile</phase>
      <goals> 
        <goal>execute</goal>
      </goals>
      <configuration>
        <source>
          project.artifact.setFile(new File("./bin/classes"))
        </source>
      </configuration>
    </execution>
    <execution>
      <id>set-main-artifact</id>
      <phase>package</phase>
      <goals> 
        <goal>execute</goal>
      </goals>
      <configuration>
        <source>
          project.artifact.setFile(new File("./bin/classes.jar"))
        </source>
      </configuration>
    </execution>
  </executions>
</plugin>

Par défaut, maven-install-plugin utilisera l'artefact identifié le long des lignes de   ${project.build.directory}/${project.finalname}.jar

Donc, une autre option pourrait aller quelque chose comme ça

<build>
    <directory>bin</directory>
    <outputDirectory>bin/classes</outputDirectory>
    <finalName>classes</finalName>
</build>

1
2017-08-19 21:55



J'ai vérifié les sources de JarMojo et cela m'a donné une idée de comment le résoudre avec Groovy (via gmaven)

<plugin>
  <groupId>org.codehaus.gmaven</groupId>
  <artifactId>gmaven-plugin</artifactId>
  <version>1.3</version>
  <executions>
    <execution>
      <id>set-main-artifact</id>
      <phase>package</phase>
      <goals> 
        <goal>execute</goal>
      </goals>
      <configuration>
        <source>
          project.artifact.setFile(new File("./bin/classes.jar"))
        </source>
      </configuration>
    </execution>
  </executions>
</plugin>

et il fonctionne!:)


1
2017-07-20 10:04



Nous avons eu le même problème, avec l'obtention de "l'artefact attaché doit avoir un ID différent de celui de l'artefact principal correspondant". Nous avons trouvé la solution dans l'excellent article de blog suivant:

http://devblog.virtage.com/2013/04/embed-and-run-ant-tasks-and-scripts-from-maven/

Comme détaillé dans cette section, vous pouvez résoudre le problème en ajoutant un classificateur afin que Maven puisse faire la distinction entre le pot construit par les fourmis et le pot construit par maven. Puisque vous utilisez un attachartifact antrun, vous avez besoin de ceci:

<attachartifact file="./bin/classes.jar" classifier="foo" type="jar"/>

Notez que vous devez également inclure ce classificateur (avec groupId, artifactId et version) chaque fois que vous souhaitez saisir ce fichier jar en tant que dépendance dans d'autres projets.


0
2018-04-24 17:59