精华内容
下载资源
问答
  • maven工程编译并生成可执行JAR包命令

    千次阅读 2013-08-29 22:51:00
    JAVA持续集成构建中,需要从SVN check out的代码编译并打成可执行JAR...利用HUDSON+MAVEN编译打包java maven工程,打包成可执行的JAR包。在HUDSON中需要填写maven命令。我想知道的是打可执行jar包的maven命令。 我的
    在JAVA持续集成构建中,需要从SVN check out的代码编译并打成可执行JAR包,高手告诉我maven命令如何?
    
    我用mvn compile package或mvn jar:jar都能打成jar包,但不能执行
    利用HUDSON+MAVEN编译打包java maven工程,打包成可执行的JAR包。在HUDSON中需要填写maven命令。我想知道的是打可执行jar包的maven命令。
    我的pom.xml中添加了:
    <plugin><artifactId>maven-assembly-plugin</artifactId><configuration><descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs><archive> <manifest>mainClass>com.ImageViewer.dao.ImageViewer</mainClass></manifest>               </archive></configuration></plugin>
    
    目前的mvn命令是:clean assembly:assembly
    但是build时报错:mavenExecutionResult exceptions not empty
    org.apache.maven.InternalErrorException: Internal error: ava.lang.NullPointerException
    换成jar:jar打成的jar包不能执行。
    展开全文
  • java命令打包java工程

    千次阅读 2018-08-08 17:44:26
    自动打包java工程 介绍 自动打包java工程,主要功能是什么呢?没错,如标题所言,就是通过...特殊情况需要,如果需要在服务器中,实现自动生成jar包,而不是在IDE的情况下,就需要该工具实现导出jar包。当然,本...

    自动打包java工程

    介绍

    自动打包java工程,主要功能是什么呢?没错,如标题所言,就是通过命令实现自动打包普通java工程,将java工程打包成一个jar包。

    前言

    肯定很多人会疑惑,为什么不用IDE直接导出jar呢?还要编写命令?不是多此一举?
    答案是:
    特殊情况需要,如果需要在服务器中,实现自动生成jar包,而不是在IDE的情况下,就需要该工具实现导出jar包。当然,本地也是可以使用的。
    如果,刚好你也有这种需求,需要通过java命令导出jar包的话,可以看下这篇博客。因为,我就是刚好碰到。
    因为,我找不到完整的命令,所以,想把这次的调研和开发脚本过程记录下来~
    当然,该工具还需要更加完善,如有建议,欢迎留言~

    思路

    1. 通过javac命令,实现将java格式的文件编译成class文件
    2. 将所有的class文件和配置文件,通过jar命令压缩成功一个jar文件

    需要解决的问题

    1. 如果使用命令javac编译所有java文件?
    2. 使用javac编译java文件的过程中,如何让编译的java文件能正确地找到对应依赖的lib和其他包名下的java文件?
    3. 如何在压缩class成jar的时候,将其他jar包也压缩到目标jar中呢?

    方案如下

    –>如何编译所有java文件?

    两种情况
    一、如果要导出的jar包是有执行主类的,先是查找项目配置文件 MANIFEST.MF 读取出执行的Main类,然后编译Main类,因为Main类在编译的过程中,会通过需要用到的类去寻找编译,这样的话,就可以链式的编译整个项目有需要用到的java文件。
    二、导出来的jar包不可以直接执行的,只能作为lib使用的,也就是没有配置文件,那就是通过找出所有包名,然后编译所有包名下的java文件,当然,javac可以一次性编译一个文件夹下的所有java文件。

    –>使用javac编译java文件的过程中,如何让编译的java文件能正确地找到对应依赖的lib和其他包名下的java文件?

    javac命令中,有一个可选项,-cp(-classpath) 后面带的就是编译时需要用到的依赖jar 和对应的其他依赖库,还有所有包名,但是为了编译的时候能找到对应的包名,必须cd到对应的src目录
    例如:

    javac -classpath .;../libs/dom4j-2.1.0.jar;compiler;main;utils;vo -encoding utf-8 -d ../classesOutput -Xlint:unchecked -Xlint:deprecation builder/*.java
    
    –>如何在压缩class成jar的时候,将其他jar包也压缩到目标jar中呢?

    将用到的jar包复制到编译出的class文件夹中,然后使用jar命令压缩即可

    javac命令

    javac -classpath .;../libs/dom4j-2.1.0.jar;compiler;main;utils;vo -encoding utf-8 -d ../classesOutput -Xlint:unchecked -Xlint:deprecation builder/*.java
    说明:
    -classpath 后面带的是编译过程中所需要用到的类,可以为jar包、类保存的文件夹、zip文件等
    -encoding 指定编译时的java文件编码格式为utf-8格式
    -d 后面带输出的class的路径
    -Xlint:unchecked -Xlint:deprecation 避免编译不通过
    builder/*.java 编译当前目录下的builder包中的所有Java文件
    

    注意:
    1、Windows下和Linux下的命令还有所差异,Windows下,-cp(-classpath)后面接的库需要用’;‘隔开,Linux下的得用’:'隔开
    2、在Linux下,使用Java.Runtime.exec命令执行的时候,需要注意,部分命令执行无法达到效果,也就是没执行起来,具体的调用,在Linux下,需要加上两个操作符。
    String[] cmds = {“sh”, “-c”, cmd};
    process = Runtime.getRuntime().exec(cmds, null, runDir);

    3、文件的编码格式最好是utf-8,不然编译会出问题
    4、jar包和输出路径可以使用绝对路径,但是包名的应用不能使用绝对路径,不然会找不到对应的包名
    5、执行该命令的时候,一定要cd到src目录中,不然包名会找不到!
    6、最好添加这两个可选项 -Xlint:unchecked -Xlint:deprecation 不然,当接口废弃或者unchecked的时候,会提示哪些方法是unchecked和deprecation的!

    jar命令

    jar cvfm C:/Users/37/Desktop/test/test.jar C:/Users/37/Desktop/test/bin/META-INF/MANIFEST.MF -C C:/Users/37/Desktop/test/bin/ .
    说明:
    jar cvfm 输出的jar包的路径 配置文件的路径 -C 编译的好的class文件夹路径 .
    注意:bin/ 表示class的父级文件夹;最后记得要空格加一个"."
    
    

    写在最后

    具体的工具代码实现,最主要的命令就是上面这两个,如果遇到什么问题,欢迎留言~

    项目的GitHub地址:ExportJarCommand

    展开全文
  • 如何使用jar命令java工程进行打包

    千次阅读 2009-04-20 11:24:00
    一. jar命令用法: 在cmd命令窗口下...例子(这里介绍的都是生成双击可执行的jar包): 1.首先介绍如何在命令行下执行打包程序。 1.1.没有包结构的最简单的工程。 (1)在c:盘下新建文件“HelloWorld.java”: 

    一. jar命令用法:
             在cmd命令窗口下输入jar,回车,就会提示改命令的用法:

            

            二.例子(这里介绍的都是生成双击可执行的jar包)

            1.首先介绍如何在命令行下执行打包程序。
            1.1.没有包结构的最简单的工程。
                (1)在c:盘下新建文件“HelloWorld.java”:
            

    1 public class HelloWorld
    2 {
    3     public static void main(String[] args){
    4         System.out.println("Hello world!");
    5     }
    6 }         (2)在命令行下输入c:/javac HelloWorld.java,在c:盘下编译生成“HelloWorld.class”。

                (3)在c:盘下新建文件“menefest”(没有后缀名):
               
    Main-Class: HelloWorld


    注意最后要有一个空行
    ,否则会出现找不到类的错误。

                 (4)打包:输入c:/jar cvmf menefest HelloWorld.jar HelloWorld.class,在c:盘下生成“HelloWorld.jar”。

                 (5)执行:输入c:/java -jar HelloWolrd.jar。屏幕回显“HelloWorld”。

            1.2.有包结构的java工程。
                (1)在c:/com/gosyl/demo/下新建文件“HelloWorld.java”:
            

    package com.gosyl.demo;

    public class HelloWorld{
        
    public static void main(String[] args){
            System.out.println(
    "HelloWorld");
        }
    }


                (2)在命令行下输入c:/javac com/gosyl/demo/HelloWorld.java,在c:/com/gosyl/demo/文件夹下编译生成“HelloWorld.class”。

                (3)在c:盘下新建文件“menefest2”(没有后缀名):
            

    Main-Class: com.gosyl.demo.HelloWorld

      
              注意最后要有一个空行
    冒号后面要一个空格。否则会出现找不到类的错误。

                (4)打包:输入c:/jar cvmf menefest2 HelloWorld.jar com/,在c:盘下生成“HelloWorld.jar”。

                (5)执行:输入c:/java -jar HelloWorld.jar。屏幕回显“HelloWorld”。

            1.3.引用到外部jar包的java工程。
                (1)在c:/com/gosyl/demo/下新建文件“Car.java”:
                 

    package com.gosyl.demo;

    public class Car
    {
        
    public static void main(String[] args){
            Light.on();        
        }
    }


                (2)在c:/com/gosyl/demo/下新建文件“Light.java”:
            

    package com.gosyl.demo;

    class Light 
    {
        
    public static void on(){
            System.out.println(
    "Light is on!");
        }
    }


                (3)打包1:输入c:/jar cvf  Light.jar com/gosyl/demo/Light.class,在c:盘下生成“Light.jar”。
            
                (4)在c:盘下新建文件“menefest-car”(没有后缀名):
            

    Main-Class: com.gosyl.demo.Car
    Class
    -Path: Light.jar


         注意最后要有一个空行,冒号后面要一个空格。否则会出现找不到类的错误。

                (5)打包2:输入c:/jar cvmf  menefest-car Car.jar com/gosyl/demo/Car.class,在c:盘下生成“Car.jar”。
            
                (6)执行:输入c:/java -jar Car.jar。屏幕回显“Light is on”。

        三.总结
            清单文件menifest,对格式要求很高,注意每个冒号后面要有一个空格,文件最后要有一个空行。对于引用到外部jar包的工程,需要在manifest中定义好Class-Path属性。

    展开全文
  • 使用Maven为一个工程生成多个jar包

    千次阅读 2020-02-25 22:04:07
    有时候我们需要在一个java工程内执行打包命令生成多个jar包,每个jar包的具体内容都与具体实现类相绑定,这样的好处就是方便。比如我们项目中对外提供了插件扩展,第三方使用者只需要实现我们的插件接口,然后打成...

    目录

    前言

    实现

    多模块实现

    maven-assembly-plugin插件实现

    关于properties标签题外话(maven的内置变量)


    前言

    有时候我们需要在一个java工程内执行打包命令能生成多个jar包,每个jar包的具体内容都与具体实现类相绑定,这样的好处就是方便。比如我们项目中对外提供了插件扩展,第三方使用者只需要实现我们的插件接口,然后打成jar包上传到我们的项目中便可动态解析,而使用者的需求便是能在一个工程内同时编辑多个业务插件,最终打包时也能生成多个不同的jar包以作不同的用途,因此作为产品方需要给出一个demo供他们直接上手。

     

    实现

    多模块实现

    这个应该很好理解,可以使用多模块的方式实现,每个模块就相当于一个插件,最终打包时直接mvn package便能在不同模块的target目录下输出各自的jar包,实现简单,但是层次上存在一个父子关系,而实际上并不存在,因此不太好。

    maven-assembly-plugin插件实现

    使用该插件配合描述文件实现,整体项目结构如下图:

    pom文件如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>qingcha.test</groupId>
        <artifactId>multiPluginDemo</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <dependencies>
            <!-- 引入插件目标接口以及相关依赖 -->
            <dependency>
                <artifactId>hornet-web-api</artifactId>
                <groupId>uyun.hornet</groupId>
                <version>2.0.0-SNAPSHOT</version>
                <!-- 表示已提供依赖范围,由于是作为插件jar包运行在主项目中,而主项目中存在该依赖,因此实际运行的时候并不需要maven重复引入一遍,
                 因此该依赖范围表示只在测试和编译classpath时有效,在运行时无效,换句话说就是该依赖不会被打进包中-->
                <scope>provided</scope>
            </dependency>
    
        </dependencies>
    
        <!-- 在properties标签中定义的值可以通过使用${key}在pom的任何位置访问,其中key为属性值 -->
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
            <project.assembly.directory>src/main/resources/assembly</project.assembly.directory>
        </properties>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <version>2.6</version>
    
                     <configuration>
                        <!--该方式会将所有依赖打包到jar,生成的jar包带有jar-with-dependencies后缀 -->
                        <descriptorRefs>
                            <!-- 将依赖一起打包到 JAR -->
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
    
                        <!-- 该标签可以配置主main类,即 使该jar包成为可执行jar包,可在META-INF下的MF文件中找到Main-class一行 -->
                        <archive>
                            <manifest>
                                <mainClass></mainClass>
                            </manifest>
                        </archive>
                    </configuration>
    
                    <!-- 配置执行器,若还想增加编写新的插件,在此处新增执行器即可 -->
                    <executions>
                        <execution>
                            <!-- 执行器id -->
                            <id>plugin1</id>
                            <!-- 绑定到maven的package生命周期 -->
                            <phase>package</phase>
                            <goals>
                                <!-- 代表只运行一次 -->
                                <goal>single</goal>
                            </goals>
                            <configuration>
                                <descriptors>
                                    <!-- 描述文件的地址 -->
                                    <descriptor>${project.assembly.directory}/assembly-plugin1.xml</descriptor>
                                </descriptors>
                                <!-- 自定义包名,如果不配置则是 artifactId + version + assemblyId,配置后则为 finalName + assemblyId,当然也可以增加属性去除自动拼接assemblyId值 -->
                                <finalName>multiPluginDemo</finalName>
                            </configuration>
                        </execution>
    
                        <execution>
                            <id>plugin2</id>
                            <phase>package</phase>
                            <goals>
                                <goal>single</goal>
                            </goals>
                            <configuration>
                                <descriptors>
                                    <descriptor>${project.assembly.directory}/assembly-plugin2.xml</descriptor>
                                </descriptors>
                                <finalName>multiPluginDemo</finalName>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    
    </project>
    

    其中打包脚本之一的assembly-plugin1.xml文件如下:

    <assembly
            xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
    
        <!-- 文件id,与前面保持一致即可 -->
        <id>plugin1</id>
        <!-- 是否生成和压缩包同名的项目和目录 -->
        <includeBaseDirectory>false</includeBaseDirectory>
        <formats>
            <!-- 指定格式 -->
            <format>jar</format>
        </formats>
    
        <fileSets>
            <fileSet>
                <!-- 文件所在项目中的位置 -->
                <directory>${project.build.outputDirectory}/qingcha/test/common</directory>
                <!-- 打包后的展示路径,必须与包路径保持一致 -->
                <outputDirectory>qingcha/test/common</outputDirectory>
            </fileSet>
            <fileSet>
                <directory>${project.build.outputDirectory}/qingcha/test/plugin1</directory>
                <outputDirectory>qingcha/test/plugin1</outputDirectory>
            </fileSet>
            <fileSet>
                <directory>src/main/resources/plugin1</directory>
                <!-- 由于依赖spi机制,因此这里的输出路径需要满足条件,否则插件便不生效了 -->
                <outputDirectory>META-INF/services</outputDirectory>
            </fileSet>
        </fileSets>
    </assembly>
    

    最终直接使用mvn package打包即可,可在target/ 目录下看到最终的jar包,多个plugin会有多个jar包:

    如果还要增加一个plugin的话,可依次增加对应的实现类、提供者配置文件、脚本描述文件、执行器

     

    关于properties标签题外话(maven的内置变量)

    在上面的脚本描述文件中有使用到 ${project.build.outputDirectory} ,然后查看pom文件发现我们并没有定义该key值,因此也能猜到这是maven的内置变量,常用的内置变量如下:

    • ${project.basedir}:这引用了module/project的根文件夹(当前pom.xml文件所在的位置),还可以简化的写法:${basedir}
    • ${project.build.directory}:这表示默认的target文件夹。
    • ${project.build.outputDirectory}:默认情况下表示target/classes文件夹。
    • ${project.build.testOutputDirectory}:这表示默认的target/test-classes文件夹。
    • ${project.build.sourceDirectory}:这表示默认情况下src/main/java文件夹。
    • ${project.build.testSourceDirectory}:这表示默认情况下src/test/java文件夹。
    • ${project.build.finalName}:默认情况下定义为${project.artifactId}-${project.version}。
    • ${project.version}:这可以在必须编写文字版本的位置使用,否则,特别是如果您在多模块构建模块间依赖关系。
    • ${settings.localRepository}:它引用了本地存储库的位置。这是默认的${home}/.m2/repository。
     
    展开全文
  • 命令行打war jar -cvf filename.war ...1 进入命令行环境下,键入: cmd ...2 cd 到 web应用工程所在的目录下 ... 键入 jar -cvf agent.war *.* ...3 呵呵 成功啦,生成...Java打包指南-JAR文件jar命令详...
  • maven中的jar工程如果直接使用maven clean install来执行,生成jar文件并不能使用 java -jar *.jar命令来执行。 解决方法: 在pom.xml中添加下面与<dependencies/>同级别的标签。 <build> <...
  • 1、 2、 3、4、新建一个跟src同级的lib目录 5、 6、 7、 8、选中lib 9、10、 11、勾选上lib 12、写一个入口main方法 ...17、生成jar包 ...18、使用CMD命令,找到jar包所在位置,执行一下jar包,成功 ...
  • Java编译打包命令

    2020-12-22 21:53:40
     我们有的时候总是要使用将自己写的工程编译成 class 文件,同时打包成 jar,虽然有各种工具可以帮助我们,但是毕竟掌握使用 java 本来的命令去做这些更灵活  编译  比如我要编译名为 com.demo,全称为 ...
  • 都是说什么用jar命令java工程进行打包 我看了哈子,觉的有点复杂.其实,用MyEclipse 打成JAR包,简单.快速 具体操作如下: 1.点项目反键->Export 如图: <br />选择jar file 下一步 <br />下...
  • Java 编译打包命令

    2017-01-15 20:55:00
    我们有的时候总是要使用将自己写的工程编译成 class 文件,同时打包成 jar,虽然有各种工具可以帮助我们,但是毕竟掌握使用 java 本来的命令去做这些更灵活 编译 比如我要编译名为 com.demo,全称为 ...
  • 方法一:将项目及所依赖的所有jar包打包成一个jar。 1、pom.xml添加assembly插件(放在最外层)   2、执行在所在跟部门中执行命令mvn assembly:assembly   3、target文件夹中生成如下文件   4、执行...
  • MANIFEST.MF文件可以由eclipse自动生成,也可以指定外部导入运行jar包命令 java -jar helloworld.jar 如果在工程中用到了其他的jar包,虽然使用eclipse打包是可以看到引用的jar包已经加入到自己的jar中了,但是...
  • 背景 使用Apache CXF生成客户端代码有两种方式 方式一 在官网http://cxf.apache.org下载...如果你希望将客户端打成jar包,可以用CXF的maven plugin。IDEA为例打包步骤如下: 1. 新建maven工程,引入plugin依赖.
  • JAR包引用其它JAR包的classpath问题

    千次阅读 2018-03-25 17:44:54
    运行jar包命令java -jar hello.jar不过如果工程引用到了其它jar,虽然用ide工具打包时可以看到引用的JAR已经加入到了自己的JAR中,但运行时却会提示ClassNotFoundException。此时需要修改ide工具自动生成的hello...
  • Maven项目编译打包命令

    千次阅读 2018-12-25 13:02:24
    在Eclipse中的pom.xml上可以执行Maven有关命令 1、编译 compile 1.1右键Run As,选择2 Maven build,在目标Goals中录入compile ...支持动态打包,web工程生成war包,Java工程生成jar包,我的项目是java 控...
  • (一)springboot web项目打jar包1、打包两种打包方式maven命令打包切换目录到工程根下,pom.xml所在位置,运行maven的打包命令mvn clean package -Dmaven.test.skip=trueIDEA 工具执行maven任务打包会在xxx项目模块下...
  • 用到第三发jar包3.多个包多级目录的java工程 我试了一下,下面三种方式都可以,可用通配符。 ps: 常用-d classes将生成的.class文件指定到目录,以便打jar。不加则在java文件统计目录。 C:\Users\15164\Desktop&...
  • 1、无需在pom.xml中配置build,在Maven视图中点击Lifecycle-package,再点击其中的运行,即可默认在工程目录生成target文件夹,其中有src-main对应的jar包。关于target的内容,请看:...
  • spring-boot 默认提供内嵌的tomcat,所以打包直接生成jar ,用java-jar 命令就可以启动。但是,有时候我们更希望一个tomcat 来管理多个项目或者使用jetty、netty等其他web服务器,这种情况下就需要项目是war 而...
  • Android 执行JAR包

    千次阅读 2017-09-15 20:01:00
    简单几步操作在android中执行jar工程中新建New Module...解压aar得到jar包,注意该jar包还是java字节码的,需要转换下,通过Sdk\build-tools\XXXXXX\dx.bat命令,转换为android可用的jar包jar包push到手机执行执行j
  • 2. 在光标位置输入命令:mvn clean 。...3. 输入打 jar 命令:mvn install -Dmaven.test.skip=true (-Dmaven.test.skip=true :路过自动测试) 4.从提示所指示的目录找到新生成的 j...
  • 当我使用maven管理工程结构时,我们的项目如果不是web项目,最终会生成一个jar文件,当我们使用java命令执行该jar文件时,不仅需要指定jar包中MainClass路径,而且还要通过脚本命令把依赖的jar包配置进去,这样非常...
  • 关于Jar命令

    千次阅读 2010-12-30 20:59:00
    <br />jar cvf 输出文件名 文件列表 如: jar cvf... 比如,在命令提示符下,当前目录为code,code下面有个test工程,test工程里面就是一些class文件(可能有一些Java包),这时候怎么打包? code
  • 右键单击工程,点开“Export…”,在弹出的对话框中选择“java/JAR file”, 这样就会生成到项目的根目录的上一层,针对生成的“WordCount.jar”,通过以下命令执行程序: hadoop jar WordCount.jar /README.txt /...
  • Android使用jack编译系统后,Android.mk编译,生成jar中是classes.dex,不能被工程引用,因此需要编译出包含*.class的jar 编译方式为: 在代码的目录下执行mk文件自动生成的目录,例如Himw.jar 执行命令如下: mm...
  • 稍微大点的项目都会用 maven 或者 ant 来构建,在 maven 工程中,...默认Maven生成JAR包只包含了编译生成的.class文件和项目资源文件,而要得到一个可以直接在命令行通过 java命令运行的JAR文件,还要满足两个条件...
  • ``` ... import java.util.ArrayList; ... ...public class ExtraRoute { public static native ArrayList<LatLng> getDrivePath(double[]...com.abcdefg.LatLng是我导入工程里面其他Jar包里面的类 请问这种问题如何解决?
  • 近期因为项目需要,调研了myBatis 3.x的使用,当然,顺便也就研究了一下使用Generator来通过逆向工程生成pojo,mapper等文件。使用这个工具之前,要先下载相关的jar包,我使用的是最新的mybatis-generator-core-...

空空如也

空空如也

1 2 3 4 5 6
收藏数 117
精华内容 46
关键字:

java工程生成jar包命令

java 订阅