Vraag Specificeer JDK voor gebruik door Maven


Ik probeer een Hudson-plug-in te bouwen die ik heb aangepast en het vereist jdk1.6. Dit is prima, maar ik zie niet hoe ik maven kan vertellen waar de andere jdk is. Ik heb op het internet weinig vermeldingen gevonden, maar die lijken niet op mij van toepassing te zijn. Sommigen stellen voor om wat config toe te voegen .m2/settings.xml maar ik heb geen settings.xml. Bovendien wil ik 1.6 niet gebruiken voor alle maven-builds.

Eén knik is die ik gebruik mvn in cygwin, als dat überhaupt iets uitmaakt. Het lijkt erop dat ik de specificatie in het project-pom-bestand kan maken, maar de bestaande pom is behoorlijk kaal.

Dus de bottom line is, is er een manier om een ​​jdk te specificeren voor een enkele aanroep van maven?


93
2018-03-23 21:11


oorsprong


antwoorden:


Dus de bottom line is, is er een manier om een ​​jdk te specificeren voor een enkele aanroep van maven?

Wijzig tijdelijk uw JAVA_HOME.


88
2018-03-23 21:15



Het lijkt erop dat maven hier nu een oplossing biedt: Het compileren van bronnen met behulp van een andere JDK

Laten we zeggen dat je JAVA_HOME wijst naar JDK7 (die maven-processen uitvoert)

Jouw pom.xml zou kunnen :

<build>
    <plugins>
        <!-- we want JDK 1.6 source and binary compatiblility -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
        <!-- ... -->
        <!-- we want sources to be processed by a specific 1.6 javac -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
              <verbose>true</verbose>
              <fork>true</fork>
              <executable>${JAVA_1_6_HOME}/bin/javac</executable>
              <compilerVersion>1.3</compilerVersion>
            </configuration>
        </plugin>
    </plugins>
</build>

Als uw ontwikkelaars gewoon de volgende regels toevoegen (en aanpassen) in hun settings.xml, je pom zal platformonafhankelijk zijn:

<settings>
  [...]
  <profiles>
    [...]
    <profile>
      <id>compiler</id>
        <properties>
          <JAVA_1_4_HOME>C:\Program Files\Java\j2sdk1.4.2_09</JAVA_1_4_HOME>
          <JAVA_1_6_HOME>C:\Program Files\Java\j2sdk1.6.0_18</JAVA_1_6_HOME>
        </properties>
    </profile>
  </profiles>
  [...]
  <activeProfiles>
    <activeProfile>compiler</activeProfile>
  </activeProfiles>
</settings>

63
2017-12-26 15:38



Zoals je zei: "Plus, ik wil 1.6 niet gebruiken voor alle maven-builds." .... Zo beter zal ik zeggen: pas je pom-bestand aan en specificeer welke jdk-versie je wilt gebruiken.

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <source>1.9</source>
                <target>1.9</target>
            </configuration>
        </plugin>
    </plugins>
</build>

Het zorgt ervoor dat uw specifieke project die versie van jdk gebruikt.


19
2017-08-24 16:03



compileren: compileren heeft een gebruikerseigenschap waarmee u een pad naar de kunt opgeven javac.

Merk op dat deze gebruikerseigenschap alleen werkt wanneer fork is true welke is false standaard.

$ mvn -Dmaven.compiler.fork=true -Dmaven.compiler.executable=/path/to/the/javac compile

Het is mogelijk dat u de waarde moet verdubbelen als deze spaties bevat.

> mvn -Dmaven.compiler.fork=true -Dmaven.compiler.executable="C:\...\javac" compile

Zie ook Voorrang bij Maven-aangepaste eigenschappen.


17
2018-04-15 12:27



Ik zeg dat je JAVA_HOME opstelt zoals Pascal zegt: In cygwin als je bash gebruikt als je shell zou moeten zijn "export JAVA_HOME = / cygdrive / c / pathtothejdk" En het is nooit schadelijk om ook de java-bin-dir naar het PATH te exporteren met "PATH exporteren = $ {JAVA_HOME} / bin: $ {PATH}"

en voeg ook maven-enforce-plugin toe om ervoor te zorgen dat de juiste jdk wordt gebruikt. Dit is een goede oefening voor je pom.

<build>
 <plugins>
   <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-enforcer-plugin</artifactId>
      <executions>
        <execution>
          <id>enforce-versions</id>
          <goals>
            <goal>enforce</goal>
          </goals>
          <configuration>
            <rules>
              <requireJavaVersion>
                <version>1.6</version>
              </requireJavaVersion>
            </rules>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

http://maven.apache.org/plugins/maven-enforcer-plugin/usage.html


12
2018-03-24 04:37



Ik weet dat het een oude draad is. Maar ik had wat problemen met iets soortgelijks als dit in de Maven voor Java 8-compilerbron. Ik heb dit uitgevonden met een snelle oplossing genoemd in Dit artikel Ik dacht dat ik het hier kon plaatsen en misschien anderen kan helpen:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>

8
2018-01-12 03:53



Maven gebruikt variabele $ JAVACMD als de laatste java-opdracht, stel deze in op waar het java-uitvoerbare bestand van maven naar andere JDK zal overschakelen.


4
2017-08-30 06:14



Hudson biedt je ook de mogelijkheid om verschillende Java-runtimes te definiëren en Maven met een van deze aan te roepen. Bekijk de configuratiepagina van dichterbij.


3
2018-03-23 22:06