IDEA下配置本地Maven就不赘述了,网上很多教程,主要是总结一下,打包成可运行的jar文件所遇到的一些问题!

一.打包时遇到语言编译等级不够的问题

形如以下这样的错误:

[ERROR] /D:/JavaProject/EasyHttp/src/main/java/EasyHttp/EasyRequest.java:[30,50] -source 1.5 中不支持 diamond 运算符
  (请使用 -source 7 或更高版本以启用 diamond 运算符)
[ERROR] /D:/JavaProject/EasyHttp/src/main/java/EasyHttp/EasyResponseBody.java:[137,12] -source 1.5 中不支持 try-with-resources
  (请使用 -source 7 或更高版本以启用 try-with-resources)
[ERROR] /D:/JavaProject/EasyHttp/src/main/java/EasyHttp/EasyHttpClient.java:[36,12] -source 1.5 中不支持 try-with-resources
  (请使用 -source 7 或更高版本以启用 try-with-resources)

这种情况只需要在pom.xml里面添加以下属性即可:

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

其中最主要的是要添加这两条属性

<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>

另外,关于language level不够的情况,在IDEA中有以下几个地方需要设置

  1. 按Ctrl+Alt+S打开设置,找到Build,Execution,Deployment→Compiler→Java Compiler,右侧的Module中,如图所示:
  2. 按Ctrl+Alt+Shift+S打开Project Structure,找到Project,然后右侧可以设置使用的JDK版本,以及language level,如图所示:

    设置完成后不要忘了点右下角应用.
  3. 按Ctrl+Alt+Shift+S打开Project Structure,找到Modules,右侧点击Sources,同样可以设置模块的language level,如图所示:

以后遇到编译语言等级不够的情况可以将以上设置全部设置一遍.

二.将项目打包成jar文件,并通过命令行以:java -jar xxx.jar的方式运行

首先是将Maven项目打包成jar,这在idea中还是很容易做到

首先找到idea右侧的Maven project按钮,如图所示

点击后找到Lifecycle,展开它并找到package,然后双击运行,如图所示:

然后就会开始打包,直到控制台出现以下标识时代表打包成功了

往上面翻找,你会找到这样一条信息,他会告诉你构建出来的jar包所在的位置

通常来讲它应该是在项目根目录下的target目录下.

这个时候我们就可以通过java -jar xxx.jar来运行这个jar文件,但是这个时候可能会遇到 xxx.jar.中没有主清单属性 这样的错误,如图所示:

这需要在pom.xml加入以下信息

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <appendAssemblyId>false</appendAssemblyId>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>CloudCreatePackage.CloudPackage</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>assembly</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

其中最关键的便是这一句:

<mainClass>主类的全限定名</mainClass>

他指定了谁是主类,这是一个全限定名称,包名+类名(我这里是CloudCreatePackage.CloudPackage),该类中应该有一个main方法作为程序的入口.

另外需要提的是这一行:

<descriptorRef>jar-with-dependencies</descriptorRef>

它会将项目中所依赖的jar全部打入包中,如果没有这一句,那么可能会出现ClassNotFound错误.

三.Maven项目中引入本地jar包

网上关于这一块的资料挺多的,反正我研究了很久也没研究明白,最终我是采用的将需要引入的jar包添加到本地仓库,然后再按照普通添加依赖的方式在pom.xml中添加依赖.
首先,需要将jar包添加到本地仓库,因为我的jar本身就是一个Maven项目,所以就直接在IDEA里面安装就好了,如图所示:

这个项目是我需要打包成jar的,找到右侧Maven Project,然后双击install,即可安装到本地Maven仓库

如果这个jar是从网上下载的,那么需要在命令行下来进行安装,打开CMD,输入以下命令:

mvn install:install-file -Dfile=D:/MyTools-1.0-SNAPSHOT.jar -DgroupId=cn.zzy -DartifactId=MyTools -Dversion=1.0.0 -Dpackaging=jar

-Dfile:代表你需要安装的jar文件的绝对路径
-DgroupId:所属的groupId
-DartifactId:artifactId
-Dversion:版本号

安装完成后,你应该会看到这样的信息:

最后就可以在本地仓库找到安装好的jar文件:

我的本地仓库在D:\MavenLocalRepository,然后后面的路径是 groupId + / + artifactId + / 版本号,如上图所示,我刚刚安装了两个,其中1.0.0版本是通过命令行的方式安装的,1.0-SNAPSHOT则是通过IDEA来安装的.

最后只需要在项目中引入依赖即可

<dependency>
    <groupId>cn.zzy</groupId>
    <artifactId>MyTools</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

而且参考上面的内容,可以知道,只需要在打包的时候加入

<descriptorRef>jar-with-dependencies</descriptorRef>

那么,本地仓库中的jar也会以class的形式被添加到打出来的jar包中.

四.为jar包添加文档注释

打包出来的jar是没有注释的,如图所示:

而且代码也跟原本的不太一样了,所以可以猜到,这是根据字节码文件反编译出来的源码,很难看.

按Ctrl+Alt+Shift+S打开Project Structure,找到Libraries,可以看到右侧Sources和JavaDocs都是红色丢失的.

可以通过两个插件来为其生成源码和注释,在pom.xml里面添加以下内容:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>3.0.0</version>
        <executions>
            <execution>
                <id>attach-javadocs</id>
                <goals>
                    <goal>jar</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <version>3.0.0</version>
        <executions>
            <execution>
                <id>attach-sources</id>
                <goals>
                    <goal>jar</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

此时再次打包,就会多出两个jar文件,如图所示:

同样的,可以通过install来安装到本地Maven仓库

此时仓库里面的内容:

这个时候,再在另一个项目中引入该jar,就可以看到源码和注释了

同样的,按住Ctrl+Alt+Shift+S打开Project Structure,找到Libraries,可以看到右侧Sources和JavaDocs都恢复正常了


只要你成为一个废物,就没人能利用你