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?
| 归档时间: |
|
| 查看次数: |
750 次 |
| 最近记录: |