Maven toevoegen potten door systemPath/systeem, maar niet toegevoegd aan oorlog of ergens anders

Wil ik toevoegen van een jar-bestand via de systemPath van de lokale file-systeem in vergelijking met mijn project directory structuur, niet op een remote repository. Ik voegde de afhankelijkheid verklaring, maar maven niet iets anders doen met het.

In de verklaring onderaan, ik wil het jar-bestand gekopieerd naar mijn web-inf/lib en ook jarred als onderdeel van het war-bestand. Op dit moment gebeurt dat niet. Hoe zou ik het jar-bestand gekopieerd naar mijn war-bestand?

Dit is de output van debug-maven-modus:

DEBUG] cglib:cglib-nodep:jar:2.2:test (setting scope to: compile)^M
DEBUG] Retrieving parent-POM: org.objenesis:objenesis-parent:pom:1.2 for project: null:objenesis:ja
DEBUG]   org.objenesis:objenesis:jar:1.2:test (selected for test)^M
DEBUG]   org.javap.web:testRunWrapper:jar:1.0.0:system (selected for system)^M
DEBUG] Plugin dependencies for:
...


<dependency>
    <groupId>org.javap.web</groupId>
    <artifactId>testRunWrapper</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${basedir}/lib/testRunWrapper.jar</systemPath>
</dependency>
<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <configuration>                 
        <webResources>
            <resource>
                <directory>WebContent</directory>
            </resource>
        </webResources>
    </configuration>
</plugin>

 

7 Replies
  1. 25

    OK, ik heb dit: Let op de directory structuur aan de onderkant.
    Met de aanpak hieronder het jar-bestand van de relatieve project pad wordt behandeld als een eerste klas burger net als de andere potten. De lijst hieronder corrigeert mijn oorspronkelijke probleem. Met de pom.xml lijst hieronder het jar-bestand is gekopieerd naar mijn doelmap.

    <repositories>
        <repository>
            <id>JBoss</id>
            <name>JBoss Repository</name>
            <layout>default</layout>
            <url>http://repository.jboss.org/maven2</url>
        </repository>
    
        <repository>
           <id>my-local-repo</id>
           <url>file://${basedir}/lib/repo</url>
        </repository>
    </repositories>
    
    <dependency>
        <groupId>testRunWrapper</groupId>
        <artifactId>testRunWrapper</artifactId>
        <version>1.0.0</version>            
    </dependency>

    $ find repo
    repo
    repo/testRunWrapper
    repo/testRunWrapper/testRunWrapper
    repo/testRunWrapper/testRunWrapper/1.0.0
    repo/testRunWrapper/testRunWrapper/1.0.0/testRunWrapper-1.0.0.jar
    • En wat is de vraag? Werkt het niet? Let op dat u normaal gesproken installeren van een afhankelijkheid met mvn install:install-file en uw standaard lokale repo is in home/.m2/repository.
    • Werkt niet…
    • Dit is de manier om te gaan bundelen ojdbc6 bestuurder binnen een project. Vergeet niet om lokale systeem pad scheidingstekens backslash, wanneer toegepast op een Windows env.
    • Dit inderdaad werkt. Het is belangrijk om op te merken hoe de afhankelijkheid toegang groupId, artifactId, en versie tags betrekking hebben op het pad van de pot. Na het instellen van het juiste, ik zag onmiddellijk de pot vermeld onder ‘Maven Dependencies’ in de eclipse ‘Project Explorer’
    • Helaas, dit werkt niet als u de aanbevolen spiegel installatie voor een lokale nexus installatie. Ik gaf het op en voegde de pot op de nexus. Dit kan toch averechts werken.
    • als spiegels worden gebruikt, moet u een uitzondering toevoegen in de spiegels onderdeel als volgt uit : <mirrorOf>*, !uw-lokale-repo</mirrorOf>
    • Ik heb ojdbc6 in een map als – ThirdPartyLibs\jdbc\oracle\ojdb6.jar; als ThirdPartyLibs is mijn “mijn-lokale-repo” wat moet de afhankelijkheid xml? Is het it – <afhankelijkheid> <groupId>jdbc – </groupId> <artifactId>oracle</artifactId> <versie>6< versie> </afhankelijkheid> Het geeft mij Ontbreekt artefact jdbc:oracle:pot:6 fout

  2. 18

    Met de maven afhankelijkheid plugin doet het werk:

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.8</version>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/lib</outputDirectory>
                            <includeScope>system</includeScope>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    • FYI: toen ik dit deed, de berichten in het logboek aangegeven dat de pot was gekopieerd naar …/WEB-INF/lib/ na.de oorlog was van de losse bestanden. Dit alleen zet de kruik in de oorlog als u het twee keer zonder het doen van een schone.
    • Ik veranderde van een woord in uw setup: “package” -> “compileren” voor de uitvoeringsfase. Nu werkt het van de eerste keer of na een “schoon”. BEDANKT!!!
  3. 6

    Niet gebruik maken van het systeem. Om te doen wat je wilt, alleen verklaren als een reguliere (compileren) afhankelijkheid en het gebruik mvn installeren:installeer-bestand in uw lokale repository. Alles werkt zoals u wilt (lib, worden gekopieerd, enz.) Dat zal betekenen dat de bouw zal alleen werken op uw computer, echter.

    Om goed te repareren deze voor uw (interne) team, zal u wilt om het opzetten van een repository (bijv. Artifactory, Nexus, of Archiva). Dit is bijna een must voor team gebruik van Maven.

    Als dit voor het publiek (bijv. open source) gebruiken u kunt het nabootsen van een repository via een http-server of een echte repository.

    • Als een terzijde, CloudBees.com het biedt een mooie Maven repository-functie voor zelfs de goedkoopste account opties.
  4. 2

    probeer iets als dit (met behulp van Ant-plugin handmatig zet de pot tot aan de output directory):

    <plugin>
           <artifactId>maven-antrun-plugin</artifactId>
           <executions>
             <execution>
               <phase>test</phase>
               <goals>
                 <goal>run</goal>
               </goals>
               <configuration>
                 <tasks>
                   <copy file="${project.basedir}/pathToJAR.jar"
                         todir="${project.build.directory}/outputFileName/WEB-INF/lib"/>
                 </tasks>
               </configuration>
             </execution>
           </executions>
         </plugin>
  5. 1

    AFAIK, systeem binnen het bereik afhankelijkheden zijn vergelijkbaar met die met die omvang en zijn dus niet inbegrepen in het doel artefact. Waarom ga je niet installeren van de afhankelijkheid in de lokale repository plaats?

    Van de doc:

    systeem

    Dit toepassingsgebied is vergelijkbaar verstrekt, behalve dat je om de POT waarin het expliciet. Het artefact is altijd beschikbaar en is het niet opgezocht in een repository.

    • Ik denk dat ik het kon, maar wist niet of dat was de manier om te gaan.
    • “Gewoon” installeer de pot op uw lokale repository. Iedereen op het team, elke keer als er een nieuwe huur. Dat is de typische maven oplossing voor oudere en 3rd party kruiken, maar het zuigt. Het is veel makkelijker om deze moeilijk te krijgen potten in source control, en vervolgens een proces van het bouwen van die “gewoon werkt”, zelfs als het hebben van potten in het project bron is godslastering in maven-land. Ik, althans, zou dat liever een nexus-server fungeren als een cache voor maven centrale en lokale artefacten, niet als een aangepaste archief van zeldzaamheden 🙁
    • Of hebben een aparte repo binnen Nexus/Artifactory voor dergelijke items, genaamd “archief-van-rariteiten” of iets dergelijks, dus er is geen verwarring mogelijk. Dan hoeft u niet uit te leggen aan uw Maven mensen waarom hebt u gelasterd, negen keer per dag…
  6. 0

    Het probleem met het gebruik van een verwijzing naar het bestand systeem is dat de afhankelijke projecten zullen niet in staat zijn om wereldwijd toegang tot deze jar-bestand. d.w.z. de afhankelijke project ${basedir} is verschillend en dus zijn het .het jar-bestand zal niet worden gevonden.

    Global repositories aan de andere kant zijn voor iedereen toegankelijk zijn.

  7. 0

    In geval dit antwoord niet te werken voor u, als het niet voor mij en je weet dat system is een slecht bereik, kunt u proberen deze oplossing waar u Het installeren van de pot door het gebruik van install-plugin (scroll naar beneden), die installeert de KRUIK in uw werkelijke local Maven repository. In principe hoeft u alleen maar deze plugin toe te voegen aan uw pom.xml:

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-install-plugin</artifactId>
      <version>2.4</version>
      <executions>
        <execution>
          <phase>initialize</phase>
          <goals>
            <goal>install-file</goal>
          </goals>
          <configuration>
            <groupId>myGroupId</groupId>
            <artifactId>myArtifactId</artifactId>
            <version>myVersion</version>
            <packaging>jar</packaging>
            <file>${basedir}/lib/xxx.jar</file>
          </configuration>
        </execution>
      </executions>
    </plugin>

    Vul de juiste waarden in voor groupId, artifactId en version en zet uw originele jar-bestand in de <project-home>/lib-map en bevestig file boven. U kunt er meer toevoegen execution-secties, maar vergeet dan niet toe te voegen ids, zoals:

          <execution>
            <id>common-lib</id>

    Iedereen die updates van de code-archief moet bellen mvn initialize keer.

    En alle Eclipse-liefhebbers kunnen deze toevoegen aan pom.xml, ook om zich te ontdoen van fouten in Eclipse:

    <pluginManagement>
      <plugins>
        <!-- This plugin's configuration is used to store Eclipse m2e settings 
          only. It has no influence on the Maven build itself. -->
        <plugin>
          <groupId>org.eclipse.m2e</groupId>
          <artifactId>lifecycle-mapping</artifactId>
          <version>1.0.0</version>
          <configuration>
            <lifecycleMappingMetadata>
              <pluginExecutions>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-install-plugin</artifactId>
                    <versionRange>[2.4,)</versionRange>
                    <goals>
                      <goal>install-file</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <execute></execute>
                  </action>
                </pluginExecution>
              </pluginExecutions>
            </lifecycleMappingMetadata>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *