Java 是否可以针对不同的版本重新编译jar?
我想在我的Android应用程序中使用一个jar,它是用Maven编译的。 问题是jar是针对1.8Java编译的,而Android需要1.7或更低版本 我有jar文件和源文件。下面可以看到库的源文件目录:Java 是否可以针对不同的版本重新编译jar?,java,maven,jar,Java,Maven,Jar,我想在我的Android应用程序中使用一个jar,它是用Maven编译的。 问题是jar是针对1.8Java编译的,而Android需要1.7或更低版本 我有jar文件和源文件。下面可以看到库的源文件目录: C:. | pom.xml | sonar-project.properties | +---.sonar | \---.sonartmp | \---caches +---src | +---main | | +---java | | |
C:.
| pom.xml
| sonar-project.properties
|
+---.sonar
| \---.sonartmp
| \---caches
+---src
| +---main
| | +---java
| | | \---(folder with source java files)
| | |
| | \---resources
| | logback.xml
| |
| \---test
| \---(folder with java files)
|
\---target
| OLDJAR.jar
|
+---classes
| | .netbeans_automatic_build
| | logback.xml
| |
| \---(folder with class files)
|
+---generated-sources
| +---annotations
| \---test-annotations
+---javadoc-bundle-options
| javadoc-options-javadoc-resources.xml
| package-list
|
+---maven-archiver
| pom.properties
|
+---site
| \---(folder with Htmls)
|
\---test-classes
| .netbeans_automatic_build
|
\---(class files)
因为我是马文的新手,所以我非常感谢大家的帮助。我如何制作一个新的jar,以1.7版本为目标
我已将pom.xml文件修改为目标1.7:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
谢谢。如果测试失败,你应该看看原因。在源代码中,可以使用Java8中使用的特性,而Java7中没有这些特性,比如lambda表达式、流、新的DateTime api等
您始终可以尝试编译源代码,而不运行此处所述的测试,但我不建议这样做。如果测试失败,您应该查看原因。在源代码中,可以使用Java8中使用的特性,而Java7中没有这些特性,比如lambda表达式、流、新的DateTime api等
您可以尝试编译源代码而不运行此处所述的测试,但我不建议您这样做。您不应该忽略测试失败。但是,如果您想检查除了测试失败之外是否还有其他问题,可以通过向maven提供-Dmaven.test.skip=true来暂时禁止测试。您不应该忽略测试失败。但是,如果您想检查除了测试失败之外是否还有其他问题,可以通过向maven提供-Dmaven.test.skip=true来暂时禁止测试。我建议您向pom中添加两个配置文件:一个用于在1.7中编译,另一个用于1.8。例如:
<project>
...
<build>
...
</build>
<profiles>
<profile>
<id>jdk1.7</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>jdk1.8</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
在开发环境(如Eclipse)中,通常有一个文本字段来指定选定的概要文件
见官员
当然,我鼓励您不要忽略测试结果。我建议您在pom中添加两个配置文件:一个用于在1.7中编译,另一个用于1.8中编译。例如:
<project>
...
<build>
...
</build>
<profiles>
<profile>
<id>jdk1.7</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>jdk1.8</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
在开发环境(如Eclipse)中,通常有一个文本字段来指定选定的概要文件
见官员
当然,我鼓励您不要忽视测试结果。您的方法似乎很好。我得到一些测试失败不是很具体,可以更精确吗?如果您不担心测试失败,您可以运行
mvn clean install-DskipTests
。你在1.8下有没有同样的测试失败?降级语言版本显然会导致problems@vikingsteve我没有想到这一点。可能是版本的更改导致了测试失败吗?我下载了jar的1.8编译版本,所以我想没有测试失败……是的,非常肯定。尝试将其临时恢复到1.8,使用测试进行构建,并让我们知道它是否构建为绿色。通过这种方式,您可以将故障隔离到语言级别。Zavael的回答非常详细。@vikingsteve即使有1.8我也会出错:[INFO]生成失败[ERROR]无法执行目标org.apache.maven。插件:maven surefire插件:2.12:项目测试(默认测试):存在测试失败。[错误]请参考surefire报告了解单个测试结果。你的方法似乎很好。我得到一些测试失败不是很具体,可以更精确吗?如果您不担心测试失败,您可以运行mvn clean install-DskipTests
。你在1.8下有没有同样的测试失败?降级语言版本显然会导致problems@vikingsteve我没有想到这一点。可能是版本的更改导致了测试失败吗?我下载了jar的1.8编译版本,所以我想没有测试失败……是的,非常肯定。尝试将其临时恢复到1.8,使用测试进行构建,并让我们知道它是否构建为绿色。通过这种方式,您可以将故障隔离到语言级别。Zavael的回答非常详细。@vikingsteve即使有1.8我也会出错:[INFO]生成失败[ERROR]无法执行目标org.apache.maven。插件:maven surefire插件:2.12:项目测试(默认测试):存在测试失败。[错误]请参考surefire报告了解单个测试结果。你是对的:测试是为了测试软件的质量,它们应该得到尊重。但不要担心使用编译器/JRE版本中没有的语言功能:即使关闭测试,它们也会在编译时失败。是的,我几乎可以肯定,如果在测试中使用了新功能,它们也会在应用程序源代码中使用,因此,我不建议跳过测试。我尝试跳过测试,以查看jar是否已创建,但事实并非如此。oldjar构建时是否可能没有测试失败,但现在有了?@TinaLooke最有可能的是java 8的新功能(i.ei 1.8源代码)是测试失败和编译失败的主要原因。您应该检查失败的地方,以便进一步确定问题。@Zavael我试图用java 8编译,但仍然出现错误。这可能吗?也许我错过了什么?隐藏的依赖关系等等?你是对的:测试是为了测试软件的质量,它们应该得到尊重。但不要担心使用编译器/JRE版本中没有的语言功能:即使关闭测试,它们也会在编译时失败。是的,我几乎可以肯定,如果在测试中使用了新功能,它们也会在应用程序源代码中使用,因此,我不建议跳过测试。我尝试跳过测试,以查看jar是否已创建,但事实并非如此。oldjar构建时是否可能没有测试失败,但现在有了?@TinaLooke最有可能的是java 8的新功能(i.ei 1.8源代码)是测试失败和编译失败的主要原因。你应该检查失败的地方,以便继续找出问题所在。@Zavael I
mvn -P jdk1.8 clean install