精华内容
下载资源
问答
  • 理解maven命令package、install、deploy的联系与区别

    万次阅读 多人点赞 2018-05-15 16:15:39
    我们在用maven构建java项目时,最常用的打包命令有mvn package、mvn install、deploy,这三个命令都可完成打jar包或war(当然也可以是其它形式的包)的功能,但这三个命令还是有区别的。下面通过分别执行这三个命令...

    鄙人的新书《Elasticsearch权威指南》正式出版发行,欢迎购买!本书由华为、中兴高级技术专家全面审读并撰序,助您挑战百万年薪 购书链接: 《Elasticsearch权威指南》

    欢迎关注鄙人公众号,技术干货随时看!
    在这里插入图片描述

    技术交流qq群: 659201069

    鄙人的新书《elasticsearch7完全开发指南》,欢迎订阅!

    https://wenku.baidu.com/view/8ff2ce94591b6bd97f192279168884868762b8e7

    《kibana权威指南》

    https://wenku.baidu.com/view/24cfee1ce43a580216fc700abb68a98270feac21

    我们在用maven构建java项目时,最常用的打包命令有mvn package、mvn install、deploy,这三个命令都可完成打jar包或war(当然也可以是其它形式的包)的功能,但这三个命令还是有区别的。下面通过分别执行这三个命令的输出结果,来分析各自所执行的maven的生命周期。

    mvn clean package

    这里写图片描述这里写图片描述

    mvn clean install

    这里写图片描述这里写图片描述

    mvn clean deploy(忽略最后的BUILD FAILURE)

    这里写图片描述这里写图片描述

    通过三个命令的输出我们可以看出三者的区别在于包函的maven生命的阶段和执行目标(goal)不同。在我的上一篇文章https://blog.csdn.net/zhaojianting/article/details/80321488 中介绍了maven的生命周期和各种插件,不明白的请参考此博文。maven生命周期(lifecycle)由各个阶段组成,每个阶段由maven的插件plugin来执行完成。生命周期(lifecycle)主要包括clean、resources、complie、install、pacakge、testResources、testCompile、deploy等,其中带test开头的都是用业编译测试代码或运行单元测试用例的。

    仔细查看上面的输出结果截图,可以发现,

    • mvn clean package依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)等7个阶段。
    • mvn clean install依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install等8个阶段。
    • mvn clean deploy依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install、deploy等9个阶段。

    由上面的分析可知主要区别如下,

    • package命令完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
    • install命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库,但没有布署到远程maven私服仓库
    • deploy命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
    展开全文
  • 前言在这篇文章中,我将会解析 ImportError: attempted relative import with no known parent package 这个异常的原因。当你在运行的python脚本。使用了相对引用方式 (类似import ..module) 去引用包时,可能会出现...

    前言

    在这篇文章中,我将会解析 ImportError: attempted relative import with no known parent package 这个异常的原因。当你在运行的python脚本。使用了相对引用方式 (类似import ..module) 去引用包时,可能会出现这个异常。

    让我们来看看发生这个异常的例子。

    问题

    假设你有以下目录结构:

    project
    ├── config.py
    └── package
        ├── __init__.py
        └── demo.py
    

    config.py 中包含一些应该在 demo.py 中使用的变量

    • project/config.py
    count = 5
    
    • project/package/demo.py
    from .. import config
    print("The value of config.count is {0}".format(config.count))
    

    当我们尝试运行demo.py时,会遇到以下错误:

    E:\project> python demos/demo.py
    Traceback (most recent call last):
      File "demos/demo.py", line 1, in <module>
        from .. import config
    ImportError: attempted relative import with no known parent package
    

    python解释器抛出了没有父级包的异常。为什么?

    让我们看看python解释器是如何解析相关模块。从 PEP 328 中,我们找到了关于 the relative imports(相对引用)的介绍:

    Relative imports use a module’s __name__ attribute to determine that module’s position in the package hierarchy. If the module’s name does not contain any package information (e.g. it is set to __main__ ) then relative imports are resolved as if the module were a top level module, regardless of where the module is actually located on the file system.

    相对导入通过使用模块的 __name__ 属性来确定模块在包层次结构中的位置。如果该模块的名称不包含任何包信息(例如,它被设置为 __main__ ),那么相对引用会认为这个模块就是顶级模块,而不管模块在文件系统上的实际位置。

    换句话说,解决模块的算法是基于__name____package__变量的值。大部分时候,这些变量不包含任何包信息 ---- 比如:当 __name__ = __main____package__ = None 时,python解释器不知道模块所属的包。在这种情况下,相对引用会认为这个模块就是顶级模块,而不管模块在文件系统上的实际位置。

    为了演示这个原理,我们来更新一下代码:

    • project/config.py
    print('__file__={0:<35} | __name__={1:<20} | __package__={2:<20}'.format(__file__,__name__,str(__package__)))
    count = 5
    
    • project/package/demo.py
    print('__file__={0:<35} | __name__={1:<20} | __package__={2:<20}'.format(__file__,__name__,str(__package__)))
    from .. import config
    print("The value of config.count is {0}".format(config.count))
    

    再次尝试运行一下,会得到以下输出:

    E:\project> python demos/demo.py
    __file__=demos/demo.py      | __name__=__main__    | __package__=None
    Traceback (most recent call last):
      File "demos/demo.py", line 3, in <module>
        from .. import config
    ImportError: attempted relative import with no known parent package
    

    正如我们所看到的,python解释器没有关于模块所属的包的任何信息( __name__ = __main____package__ = None ),因此它抛出了找不到父级包的异常。

    解决方案一

    • 我们通过在其中创建一个新的空 __init__.py 文件来将项目目录转换为一个包。

    • 我们在项目目录的父目录中创建一个文件 main.py

    toplevel
    ├── main.py
    └── project
      ├── __init__.py
      ├── config.py
      └── demos
          ├── __init__.py
          └── demo.py
    
    • toplevel/main.py
    print('__file__={0:<35} | __name__={1:<20} | __package__={2:<20}'.format(__file__,__name__,str(__package__)))
    import project.demos.demo
    

    执行一下新的示例,输出如下:

    E:\toplevel>python main.py
    __file__=main.py                             | __name__=__main__             | __package__=None
    __file__=E:\toplevel\project\demos\demo.py   | __name__=project.demos.demo   | __package__=project.demos
    __file__=E:\toplevel\project\config.py       | __name__=project.config       | __package__=project
    The value of config.count is 5
    

    main.py 中导入 project.demos.demo 会设置相对引用的包信息( __name____package__ 变量)。现在,python解释器可以成功解析 project\demos\demo.py 中的相对引用了。

    解决方案二

    • 我们通过在 project 文件夹中创建一个新的空 __init__.py 来将 project 目录转换为一个包。

    • toplevel 目录下通过 -m 参数来调用python解释器,去执行 project.demos.demo[1]

    toplevel
    └── project
      ├── __init__.py
      ├── config.py
      └── demos
          ├── __init__.py
          └── demo.py
    

    再次执行:

    E:\toplevel>python -m project.demos.demo
    __file__=E:\toplevel\project\demos\demo.py   | __name__=__main__        | __package__=project.demos
    __file__=E:\toplevel\project\config.py       | __name__=project.config  | __package__=project
    The value of config.count is 5
    

    运行该命令将自动设置包信息(__package__变量)。现在,python解释器可以成功解析 project\ demos\demo.py 中的相对引用了(甚至认为 __name __ = __ main__ )。

    [1] 译者注:注意使用 -m 参数的时候,后面指定的执行文件没有 .py 后缀

    import-error-relative-no-parent

    注:转载请保留下面的内容

    原文链接:https://www.napuzba.com/story/import-error-relative-no-parent/

    译文链接:http://vimiix.com/post/2017/12/29/import-error-relative-no-parent/

    展开全文
  • JAVA:不同包(package)的类之间如何调用(import)

    万次阅读 多人点赞 2017-04-07 15:43:04
    Java由于应用了package的机制,将不同的类存放在不同 的类名空间中,如果不同包之间互相调用其中的类时,该怎么办呢,是直接调用还是有什么其他方法呢? 【2】属于不同包的类之间的调用方法 程序1:Test.java ...

    欢迎关注公众号:VenusBlockChain 致力于区块链技术研究,传播区块链技术和解决方案、区块链应用落地、区块链行业动态等。
    在这里插入图片描述

    #【1】问题描述
    Java由于应用了package的机制,将不同的类存放在不同 的类名空间中,如果不同包之间互相调用其中的类时,该怎么办呢,是直接调用还是有什么其他方法呢?
    #【2】属于不同包的类之间的调用方法
    程序1:Test.java

    package org.it315.example;
    public class Test 
    {
    	public void print() 
    	{
    		System.out.println("Hello World!");
    	}
    }
    

    程序2:TestPackage.java

    package org.it315;
    public class TestPackage 
    {
    	public static void main(String[] args) 
    	{
    		new Test().print();
    	}
    }
    
    

    程序1和2都放在同一目录下:
    这里写图片描述
    执行
    这里写图片描述

    出错的原因是:在类TestPackage中直接调用类Test,编译器会认为这两个类应在同一个包中,即Test完整名称为org.it315.Test。因此,在没有使用import语句时,可以将“程序2”按照下面修改。

    修改“程序1”

    package org.it315;
    public class TestPackage 
    {
    	public static void main(String[] args) 
    	{
    		new org.it315.example.Test().print();
    	}
    }
    
    

    执行
    这里写图片描述

    #【3】import

    • 在上面的修改过程中是,要调用的类直接将一个类的全名给写出来,即加上包名前缀:org.it315.example。
    • 新的问题来了,如果在程序中,要调用很多不再同一个包中的类,按照上述的做法就必须在类名前加上包名前缀。这时,为了简化书写操作,就可以使用import语句来简化此问题。通过使用import语句来导入指定的类的所属包即可。
    • import语句的做法就是在每个.java文件的第一条package语句的后面添加要调用的类的包名。
    • 语法格式为:import PackageName.*;
      import PackageName.ClassaName;

    对“程序2”进行修改:

    package org.it315;
    import org.it315.example.*;//标记1
    //import org.it315.example.Test;//标记2
    public class TestPackage 
    {
    	public static void main(String[] args) 
    	{
    		new Test().print();
    	}
    }
    

    执行
    这里写图片描述

    • 通过重新编译可以发现,正是import语句的使用,我们在使用某个包里的类时,就不再需要写上一长串的包名了(如:org.it315.example)。

    • “标记1”和“标记2”所代表的语句的区别是:”标记1“的import语句导入了整个包中的类,此时程序凡是遇到的org.it315.example包中的类,都不再写包名(org.it315.example)了。”标记2“的import语句只是导入了该包中的Test类,对该包中的其他类不起作用,在程序遇到Test类时,就不再写包名了。然而,对于包中其他的类的调用,就必须写上完整的包名。

    #【4】import使用注意事项

    • 如果两个包中有相同的类名,程序在调用这两个指定的类时,就必须写上完整的包名。如,java.util、java.sql包中都有Date类,程序又同时导入了这两个包中的所有类,如:
    import java.util.*;
    import java.sql.*
    

    这时程序要调用Date类时就需要这个指定的类的地方写上完整的包名,如:java.sql.Date();或者增加一个特定的import语句来解决这个问题:import java.sql.Date;

    • 只能使用星号(*)导入一个包,而不能使用import.java.*或import java.*.*导入以java为前缀的所有包。

    • 父包与子包:如org.it.315.* 和 org.it315.example.*。父包中的类调用子包中的类,必须用子包的全名,不能省略父包名部分。

    • 当import了一个包中的所有类,并不会import这个包中的子类,如果程序中用到了子包的类,需要再次对子包单独导入。

    • import语句应该位于源文件的顶部(但是位于package语句的后面),位于类定义之前。

    修该“程序2“

    package org.it315;
    import org.it315.*;
    public class TestPackage 
    {
    	public static void main(String[] args) 
    	{
    		new Test().print();
    	}
    }
    
    

    执行
    这里写图片描述
    可以发现,编译不成功。由于只是import了类Test的父包,Test本身所在的包并没有导入进去。

    再次修改”程序2”

    package org.it315;
    import org.it315.example.*;
    public class TestPackage 
    {
    	public static void main(String[] args) 
    	{
    		new Test().print();
    	}
    }
    
    

    执行,编译成功,运行成功。
    这里写图片描述

    #【5】静态导入

    • import语句不仅可以导入一个特定的类或整个包。还可以导入静态方法和静态变量。静态导入是JDK1.5版本新增加的一个特性,尽管通常被称为“静态导入”,但注意语法上不是 static import ,而是 import static 。

    • 当在一个类中需要使用外部包中的静态成员变量或成员方法时,可以使用以下方式导入外部静态成员:
      (1)import static 包名.类名.静态成员变量名;
      (2)import static 包名.类名.静态成员方法名;
      (3)import static 包名.类名.*;//使用通配符“*”导入某个类的所有的静态成员。

    • 用实例来说明静态导入的用法:
      (1)按照上述的import导入一个类

    package org.it315.example;
    
    public class TestStaticImport 
    {
    	public static final int age = 100;
    	public static final String name = "Brian";
    	public static void printAge()
    	{
    		System.out.println("AGE = " + age);
    	}
    	public static void printName() 
    	{
    		System.out.println("NAME = " + name);
    	}
    }
    
    
    
    package blog.csdn;
    import org.it315.example.TestStaticImport;
    
    public class TestPackage 
    {
    	public static void main(String[] args) 
    	{
    		int AGE = TestStaticImport.age;
    		String NAME = TestStaticImport.name;
    		//new TestStaticImport().printName();
    		//new TestStaticImport().printAge();
    		TestStaticImport.printName();
    		TestStaticImport.printAge();
    		System.out.println(AGE);
    		System.out.println(NAME);
    	}
    }
    

    这里写图片描述
    (2)使用import static 导入静态成员函数和变量

    package org.it315.example;
    
    public class TestStaticImport 
    {
    	public static final int age = 100;
    	public static final String name = "Brian";
    	public static void printAge()
    	{
    		System.out.println("AGE = " + age);
    	}
    	public static void printName() 
    	{
    		System.out.println("NAME = " + name);
    	}
    }
    
    package blog.csdn;
    //import static org.it315.example.TestStaticImport.*;
    import static org.it315.example.TestStaticImport.age;
    import static org.it315.example.TestStaticImport.name;
    import static org.it315.example.TestStaticImport.printAge;
    import static org.it315.example.TestStaticImport.printName;
    
    public class TestPackage 
    {
    	public static void main(String[] args) 
    	{
    		int AGE = age;
    		String NAME = name;
    		System.out.println(AGE);
    		System.out.println(NAME);
    
    		//new TestStaticImport().printName();
    		//new TestStaticImport().printAge();
    		printName();
    		printAge();
    
    	}
    }
    

    这里写图片描述
    #【6】包的作用域

    • 标记为public的部分可以被任意的类使用;
    • 标记为private的部分只能被定义它们的类使用;
    • 如果没有指定public或private,这个部分(类,方法,变量)可以被同一个包中的所有方法访问。

    #【7】JDK中的最常见的六种包

    • java.lang——包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。
    • java.awt——包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。
    • java.applet——包含applet运行所需的一些类。
    • java.net——包含执行与网络相关的操作的类。
    • java.io——包含能提供多种输入输出功能的类。
    • java.util——包含一些实用工具类,如定义系统的特性、使用日期日历相关的函数。

    #【8】包package的作用域、类成员的访问控制
    这里写图片描述

    展开全文
  • The declared package "com.gameabc.bfc.model.bto.util" does not match the expected package "src.main.java.com.gameabc.bfc.model.bto.util" 这种类型的错误可以复制.classpath,然后删除bin目录,然后项目...

    The declared package "com.gameabc.bfc.model.bto.util" does not match the expected package "src.main.java.com.gameabc.bfc.model.bto.util"

    这种类型的错误可以复制.classpath,然后删除bin目录,然后项目右键refresh

    展开全文
  • Pycharm Available Package无法显示包的问题解决使用Pycharm的时候需要导入解释器然后安装一些第三方库,讲道理都是project Interpreter里面直接install的。但是打开之后发现无法显示列表,也无法下载。Error ...
  • npm 与 package.json 快速入门教程

    万次阅读 多人点赞 2017-08-02 19:16:20
    npm 是前端开发广泛使用的包管理工具,之前使用 Weex 时看了阮一峰前辈的文章了解...package.json 文件 package.json 如何创建 package.json 的内容 指定依赖的包 Semantic versioning(语义化版本规则) 安装 pac...
  • package.json 与 package-lock.json 的区别

    万次阅读 2019-05-06 13:04:35
    而描述模块信息的文件就是 package.json ,那么package-lock.json 又是什么,跟 package.json 有什么关系?本文将对该问题进行探索。 一、package.json { "name": "webpack-test", "version": "1....
  • Microsoft Visual C++ 2005 Redistributable Package更新版

    万次下载 热门讨论 2009-02-22 18:09:04
    Microsoft Visual C++ 2005 Redistributable Package运行库,可以在不安装Microsoft Visual C++ 2005的情况下运行需要Microsoft Visual C++ 2005支持的软件、游戏补丁等程序。 微软官方网站上提供的同样的程序,经...
  • package.json和package-lock.json到底是什么?

    万次阅读 热门讨论 2018-12-17 10:42:46
    我们每次,去npm install 会把内容记录到package.json文件中,下载的包都会发生变化,为了系统的稳定性考虑,每次执行完npm install之后会对应生成package-lock文件,该文件记录了上一次安装的具体的版本号。...
  • Oracle中 PackagePackage body的介绍

    千次阅读 2019-03-07 17:40:03
    1、Oracle Package的作用: 可以简化应用设计、提高应用性能、实现信息隐藏、子程序重载 2、ORACLE中的function 、packagepackage bodies、procedure的区别和相同: function有返回值,有参数;procedure无...
  • 真正解决方案:Cannot resolve class or package 'mysql’

    万次阅读 多人点赞 2018-09-03 20:49:28
    当使用Spring Boot 2.0 整合MySQL的时候配置可能会出现这个故障 spring.datasource.driver-class-name= ... Cannot resolve class or package ‘jdbc’ less… (Ctrl+F1) Inspection info: Checks Spring Boo...
  • Collecting package metadata (current_repodata.json): done Solving environment: failed Collecting package metadata (repodata.json): done Solving environment: failed PackagesNotFoundError: Th...
  • Sublime Test 3 Package Control

    千次下载 热门讨论 2016-09-27 21:52:18
    Sublime Test 3 Package Control
  • 【Android】ApplicationId vs PackageName

    万次阅读 2019-12-17 21:52:02
    ApplicationId vs PackageName 曾几何时,自从转入Studio阵营后就发现多了个applicationId "com.xx.xxx",虽然知道肯定会有区别,但是我却没有仔细去看,只想着把它和packageName设置成相同即可(原谅我的懒惰- -!)。...
  • 今天使用Sublime想要安装插件时发现点击Install Package提示报错 根据网上的解决方法发现问题的根源在于sublime进行插件下载时,sublime会调用... Package Settings -> Package Control->Settings-de...
  • this standard driver package cannot be installed on this system.your system is configured to require a DCH package,please update update your driver using geforce experience to download ...
  • 最近在使用sublime3,因为听说简单好用,但一直没学会怎么正确利用他,就拿跳转定义和声明来说,百度了好多答案,需要安装ctag,然后步骤123,都说package control好用,可是从没有跳转到下载页面T T 还没有开始就...
  • DRC错误: package to package spacing

    千次阅读 2016-07-15 11:25:34
    package to package spacing DRC错误:  错误显示:在DRC Report中或P-P中提示: package to package spacing :required value:0mil;Actual Value:100mil。  错误表示:元件到元件的距离不满足约束条件。...
  • Untiy导入package时报错Failed to import package with error: Couldn't decompress package
  • Eclipse: The declared package does not match the expected package
  • sublime3无论自动还是手动安装package control,只有package setting,没有package control折腾了很久。。。
  • 如果你之前用npm 安装产生了package-lock.json,后面的人用cnpm来安装你的package.json、package-lock.json安装可能会跟你安装的依赖包不一致,这是因为cnpm 不受package-lock.json影响,只会根据package.json进行...
  • 【问题描述】下载的unity 3.6在import package时只有custom package没有其他包文件 【解决方案】在asset store里搜索Standard Assets选择导入即可 导入完成后在左下角的project assets中多了一个Standard ...
  • allegro package to package spacing

    千次阅读 2011-09-26 10:50:06
    板子布局和布线都完成了,DRC report时出现package to package spacing error,由于元件密度问题,元件放得比较近,但实际是没有影响的,于是关闭 package to package spacing 检查,设置 setup->constra
  • package.json和package-lock.json的区别

    千次阅读 2019-06-04 15:11:19
    package.json文件记录你项目中所需要的所有模块 当你执行 npm i时,nodeJS会从你的package.json中读取所有的dependencies信息,package.json文件只记录你通过npm install方式安装的模块信息,而这些模块所依赖的其他...
  • 深入安卓Package Manager和Package Installer

    千次阅读 2015-06-24 14:31:05
    什么是Package Manager(包管理器)和Package Installer(程序安装包)?APK文件保存在Android的哪个地方?APK文件安装过程的细节是怎样的?Package Manager(包管理器)是怎样保存数据的?我应该去哪里找Package ...
  • Oracle PackagePackage body的介绍

    千次阅读 2015-03-24 14:11:17
    1、Oracle Package的作用: 可以简化应用设计、提高应用性能、实现信息隐藏、子程序重载 2、ORACLE中的function 、packagepackage bodies、procedure的区别和相同: function有返回值,有参数;procedure无...
  • 今天新建项目,在新建package的过程中发现自动生成了package-info.java,还需要手动删掉,后来发现是在新建package时,勾选了 create package-info.java的选项,去掉就好啦 ...
  • Oracle中PackagePackage body的介绍

    千次阅读 2016-06-06 23:19:05
     1、Oracle Package的作用:  可以简化应用设计、提高应用性能、实现信息隐藏、子程序重载 2、ORACLE中的function 、packagepackage...packagepackage body是同时存在的,就像.h和.cpp文件,如果要外部调用

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 963,066
精华内容 385,226
关键字:

package