如何修改mvn.cmd以在MANIFEST.MF文件中获取正确的jdk构建版本

jib*_*One 5 java xml pom.xml maven

我在我的机器上安装了2个版本的java,1.7和1.8.用于构建我的java项目我正在使用maven 3.5.0.

在某些情况下,我必须使用java 1.7构建我的java项目,所以我将%JAVA_HOME%环境变量更改"C:\Program Files\Java\jdk1.7.0_80""C:\Program Files\Java\jdk1.8.0_131".

然后我想如果我能这样做,pom.xml确定java的版本,通过它来构建项目.

起初我的pom.xml看起来像这样

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.7</source>
            <target>1.7</target>
        </configuration>
    </plugin>
...
</plugins>
Run Code Online (Sandbox Code Playgroud)

你可以看到有<source><target>标签,但这个标签不适用于java 1.7,1.8,也许它适用于早期版本.

所以我不得不在Mavens"settings.xml"和"pom.xml"文件中进行一些更改:

的settings.xml

<profiles>
    <profile>
        <id>compiler</id>
          <properties>
            <JAVA_1_7_HOME>C:\Program Files\Java\jdk1.7.0_80\bin\javac</JAVA_1_7_HOME>
            <JAVA_1_8_HOME>C:\Program Files\Java\jdk1.8.0_131\bin\javac</JAVA_1_8_HOME>
          </properties>
    </profile>
</profiles>

<activeProfiles>
        <activeProfile>compiler</activeProfile>
</activeProfiles>
Run Code Online (Sandbox Code Playgroud)

的pom.xml

<plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
                <executable>${JAVA_1_7_HOME}</executable>
                <verbose>true</verbose>
                <fork>true</fork>               
            </configuration>
        </plugin>
...
</plugins>
Run Code Online (Sandbox Code Playgroud)

然后使用构建mvn install和它工作!如果我将可执行文件更改为$ {JAVA_1_8_HOME},则生成的jar文件的大小会发生变化.

但是MANIFEST.MF有一个大问题.JDK的构建版本是1.8.0_161,所以MANIFEST.MF会骗人,想找出构建jdk版本.

这样做的原因是Maven(mvn.cmd文件)看起来是%JAVA_HOME%并且采用了java的路径.如果环境中没有%JAVA_HOME%变量,则采用默认系统java -version,在我的情况下是1.8.0_161(JRE版本).

这是mvn.cmd代码片段

@REM ==== START VALIDATION ====
if not "%JAVA_HOME%"=="" goto OkJHome
for %%i in (java.exe) do set "JAVACMD=%%~$PATH:i"
goto checkJCmd
Run Code Online (Sandbox Code Playgroud)

现在这是一个挑战

如何判断mvn.cmd它是由java 7编写的,是用pom.xml编写的?

如何mvn.cmd在MANIFEST.MF文件中编写正确的构建jdk?