精华内容
下载资源
问答
  • 前言Apache Maven是用于Java和其他广泛使用的基于JVM的项目的构建工具。目前用户基数庞大,想要使用Gradle的人们经常必须迁移现有的Maven构建。这次我们就来聊一下,两种工具的模型之间的差异和相似之处,并提供简化...

    前言

    Apache Maven是用于Java和其他广泛使用的基于JVM的项目的构建工具。目前用户基数庞大,想要使用Gradle的人们经常必须迁移现有的Maven构建。这次我们就来聊一下,两种工具的模型之间的差异和相似之处,并提供简化步骤可以帮助完成迁移。

    Gradle和Maven之间的主要区别是灵活性,性能,用户体验和依赖性管理。Maven与Gradle功能比较中提供了这些方面的直观概述。详细的内容,可以查看之前的文章,有对两者做详细的比较。

    自Gradle 3.0以来,Gradle投入了大量资金,以使Gradle的构建速度更快,并具有构建缓存,避免编译和改进的增量Java编译器等功能。对于大多数项目,即使不使用构建缓存,Gradle的速度也比Maven快2-10倍。

    一般准则

    对于如何构建项目,Gradle和Maven有着根本不同的看法。Gradle提供了一个灵活且可扩展的构建模型,该模型将实际工作委托给任务依赖关系图。

    b4f7e8898fd5c923bef1610f185ed607.png

    Maven使用固定的线性阶段模型,可以在其中附加目标(完成工作的事情)。虽然如此不一致的设计,但Gradle遵循许多与Maven相同的约定(例如标准项目结构),并且其依赖项管理以类似的方式工作。

    注意:建议前期保持gradle和maven的并行,直到熟练掌握gradle的构建之后,才尝试完全替换

    迁移步骤
    1. 创建一个Maven构建扫描

      能够更容易可视化现有Maven构建中发生的情况。熟悉原有的maven项目的所有项目结构、依赖关系、插件。以便可以将其与转换项目时获得的Gradle构建扫描进行比较。

    2. 开发一种机制来验证两个构建产生相同的功能包

      这是确保部署和测试不中断的至关重要的一步。即使是很小的更改,例如JAR中清单文件的内容,也会引起问题。如果Gradle构建生成的输出与Maven构建生成的输出相同,则这将对切换充满信心,并使更容易实施将带来最大收益的重大更改。

      这并不意味着需要在每个阶段都验证每个工件,尽管这样做可以帮助快速确定问题的根源。可以只关注关键输出,例如最终报告以及已发布或部署的工件。

      与Maven相比,您需要考虑Gradle产生的构建输出中的某些固有差异。生成的POM将仅包含消耗所需的信息,并且它们将针对该方案正确使用范围。您可能还会看到存档中文件和类路径中文件顺序的差异。大多数差异都是良性的,但值得识别它们并确认它们是可以的。

    3. 运行自动转换

      这将创建需要的所有Gradle构建文件,即使对于多模块构建也是如此。对于更简单的Maven项目,Gradle构建将可以运行!

    4. 为Gradle构建创建构建扫描

      构建扫描将使可视化构建中的事情变得更加容易。对于Gradle构建,能够查看项目结构,依赖关系(常规和项目间的依赖关系),正在使用的插件以及构建的控制台输出。

      此时构建可能会失败,但是没关系;扫描仍将运行。将Gradle生成的生成扫描与Maven生成的生成扫描进行比较,然后继续执行此列表以排除故障。

      建议在迁移过程中定期生成构建扫描,以帮助确定问题并排除故障。如果愿意,还可以使用Gradle构建扫描来确定提高构建性能的机会,毕竟,性能首先是切换到Gradle的主要原因。

    5. 验证依赖修复问题

    6. 配置集成和功能测试

      通过配置额外的源集,可以简单地迁移许多测试。

    7. 用Gradle等效插件替换Maven插件

      后续,我们会去了解常见的替换

    理解构建生命周期

    Maven构建基于构建生命周期的概念,该概念由一组固定阶段组成。这可能会成为用户迁移到Gradle的障碍,因为它的构建生命周期有所不同,尽管了解Gradle的构建方式如何适合初始化,配置和执行阶段的结构很重要。幸运的是,Gradle具有可以模仿Maven各个阶段的功能:生命周期任务。

    使Maven用户更轻松地过渡到Gradle,Base插件-由所有JVM语言应用诸如Java库插件之类的插件提供了一组与主要Maven阶段相对应的生命周期任务。

    maven命令gradle任务备注
    cleancleanBase插件库中提供
    compileclassesJava插件库中提供
    testtestJava插件库中提供,它仅运行单元测试,或更具体地说,运行组成测试源集的测试。
    packageassembleBase插件库中提供
    verifycheckBase插件库中提供
    installpublishToMavenLocalMaven 发布插件库中提供
    deploypublishMaven 发布插件库中提供

    执行自动转换

    Gradle的init任务通常用于创建新的骨架项目,但也可以使用它将现有的Maven构建自动转换为Gradle。将Gradle安装到系统上后,只需执行以下命令

    > gradle init

    在根项目目录,使用Gradle命令执行初始化任务。这基本上包括解析现有的POM并生成相应的Gradle构建脚本。如果迁移多项目版本,Gradle还将创建一个设置脚本。

    新的Gradle构建包括以下内容:

    • POM中指定的所有自定义存储库

    • 外部和项目间依赖

    • 用于构建项目的适当插件(仅限于Maven Publish,Java和War插件中的一个或多个)

    后续会详细了解如何构建初始化插件

    可以执行命令,完成构建

    > gradle build

    迁移完成后。这将运行测试并产生所需的组件,而您无需任何额外干预。

    依赖移植

    Gradle的依赖关系管理系统比Maven的依赖项管理系统更灵活,但它仍支持相同的库,声明的依赖关系,范围(Gradle中的依赖关系配置)和可传递依赖关系的概念。实际上,Gradle与兼容Maven的存储库完美配合,这使得迁移依赖关系变得容易。

    注:两种工具之间的显着区别是它们如何管理版本冲突。Maven使用“最接近”的匹配算法,而Gradle选择最新的匹配算法。不过放心,可以自主控制选择哪些版本,如管理传递性依赖项中所述。

    依赖声明

    Gradle使用与Maven相同的依赖项标识符组件:group ID, artifact ID and version。它还支持分类器。因此,需要做的就是将标识符的依赖项信息替换为Gradle的语法

    以Log4J举例说明,Maven依赖:

    <dependencies>    <dependency>        <groupId>log4jgroupId>        <artifactId>log4jartifactId>        <version>1.2.12version>    dependency>dependencies>

    对应的Gradle构建脚本配置如下:

    Groovy build.gradle

    dependencies {    implementation 'log4j:log4j:1.2.12'  }

    Kotlin build.gradle.kts

    dependencies {    implementation("log4j:log4j:1.2.12")  }

    Maven三元素为 groupId artifactId version,对应的Gradle为  group, module version.

    默认作用域为,Maven的compile

    Maven的作用域与Gradle的标准配置之间的一些区别归结为Gradle区分了构建模块所需的依赖性和构建依赖于该模块的模块所需的依赖性。Maven没有这种区别。

    以下是主要的Maven依赖范围以及如何处理它们的迁移:

    compile

    Gradle具有两种可用于代替compile范围的配置:implementationapi。前者适用于所有应用Java插件的项目,而api仅适用于专门应用Java库插件的项目。

    在大多数情况下,只需使用implementation配置,尤其是在构建应用程序或网络应用程序时。但是,如果您要构建Java库,则可以在构建Java库的部分中了解使用api声明哪些依赖项。

    runtime

    使用runtimeOnly配置

    test

    Gradle区分了编译项目测试所需的那些依赖项和仅运行它们所需的那些依赖项。

    应针对testImplementation配置声明测试编译所需的依赖关系。仅运行测试所需的那些应该使用testRuntimeOnly

    provided

    使用compileOnly配置。

    请注意,War插件添加了providerCompileproviderRuntime依赖项配置。它们的行为与compileOnly略有不同,只需确保这些依赖关系未打包在WAR文件中。但是,依赖项包括在运行时和测试运行时类路径中,因此,如果需要,请使用这些配置。

    import

    Gradle可以通过基于platform()和forcedPlatform()方法的特殊依赖项语法,将此类BOM用于相同的目的。

    dependencies {    implementation platform('org.springframework.boot:spring-boot-dependencies:1.5.8.RELEASE')    implementation 'com.google.code.gson:gson'     implementation 'dom4j:dom4j'}

    多模块迁移

    Maven的多模块能够很容易迁移到Gradle的多项目构建

    1. 创建一个与根POM的块匹配的设置脚本。

      例如,以下块:

      <modules>    <module>simple-weathermodule>    <module>simple-webappmodule>modules>

      可以通过在设置脚本中添加以下行来迁移:

      例如:

      Groovy settings.gradle

      rootProject.name = 'simple-multi-module'  include 'simple-weather', 'simple-webapp'
      > gradle projectsinclude::{snippetsPath}/mavenMigration/multiModule/tests/projects.out
    2. 用项目依赖项替换跨模块依赖项

      软件项目通常将软件组件分解为模块,以提高可维护性并防止强耦合。模块可以定义彼此之间的依赖关系,以在同一项目中重用代码

      Groovy build.gradle

      dependencies {    implementation project(':shared')}

      根据  web-service 项目构建

      project(':web-service') {    dependencies {        implementation project(':utils')        implementation project(':api')    }}

      f864dcc4ae3d2af535432544f1f6d722.png

    3. 使用跨项目配置复制项目继承

    注:详细的内容,可以参考下官方文档,此处还是比较难的。

    迁移Maven配置文件和属性

    Maven允许使用各种属性对构建进行参数化。一些是项目模型的只读属性,其他是用户在POM中定义的属性。它甚至允许将系统属性视为项目属性。

    过滤资源

    Maven有一个称为process-resources的阶段,该阶段具有目标资源:默认情况下绑定到它的资源

    Gradle的Java插件提供了processResources任务来执行相同的操作。这是一个复制任务,可将文件从配置的资源目录(默认情况下为src / main / resources)复制到输出目录。与任何复制任务一样,您可以对其进行配置以执行文件过滤,重命名和内容过滤

    processResources {    expand(version: version, buildNumber: currentBuildNumber)}

    移植公共插件

    Maven和Gradle共享一种通过插件扩展构建的通用方法。尽管表面上的插件系统有很大不同,但是它们共享许多基于功能的插件,例如:

    • Shade/Shadow

    • Jetty

    • Checkstyle

    • JaCoCo

    • AntRun (see further down)

    以checkstyle插件为例,Maven

    ...<plugin>  <groupId>org.apache.maven.pluginsgroupId>  <artifactId>maven-checkstyle-pluginartifactId>  <version>2.17version>  <executions>    <execution>      <id>validateid>      <phase>validatephase>      <configuration>        <configLocation>checkstyle.xmlconfigLocation>        <encoding>UTF-8encoding>        <consoleOutput>trueconsoleOutput>        <failsOnError>truefailsOnError>        <linkXRef>falselinkXRef>      configuration>      <goals>        <goal>checkgoal>      goals>    execution>  executions>plugin>...

    迁移到Gradle时,可以安全地忽略配置块之外的所有内容。在这种情况下,相应的Gradle配置如下所示:

    checkstyle {    config = resources.text.fromFile('checkstyle.xml', 'UTF-8')    showViolations = true    ignoreFailures = false}

    总结

    本篇内容,我们聊了maven到gradle移植过程中的奇奇怪怪的事情。基本上涵盖,但是具体的内容,还需要对应的去了解,仔细点研究。

    91d5f6d254d09945fea9c001b2b134e4.gif

    eb30e56695da10c9d02bea1b691ced70.png

    展开全文
  • 前言Apache Maven是用于Java和其他广泛使用的基于JVM的项目的构建工具。目前用户基数庞大,想要使用Gradle的人们经常必须迁移现有的Maven构建。这次我们就来聊一下,两种工具的模型之间的差异和相似之处,并提供简化...

    前言

    Apache Maven是用于Java和其他广泛使用的基于JVM的项目的构建工具。目前用户基数庞大,想要使用Gradle的人们经常必须迁移现有的Maven构建。这次我们就来聊一下,两种工具的模型之间的差异和相似之处,并提供简化步骤可以帮助完成迁移。

    Gradle和Maven之间的主要区别是灵活性,性能,用户体验和依赖性管理。Maven与Gradle功能比较中提供了这些方面的直观概述。详细的内容,可以查看之前的文章,有对两者做详细的比较。

    自Gradle 3.0以来,Gradle投入了大量资金,以使Gradle的构建速度更快,并具有构建缓存,避免编译和改进的增量Java编译器等功能。对于大多数项目,即使不使用构建缓存,Gradle的速度也比Maven快2-10倍。

    一般准则

    对于如何构建项目,Gradle和Maven有着根本不同的看法。Gradle提供了一个灵活且可扩展的构建模型,该模型将实际工作委托给任务依赖关系图。

    7d4deb31c951d8fe8098cc27adcc1e50.png

    Maven使用固定的线性阶段模型,可以在其中附加目标(完成工作的事情)。虽然如此不一致的设计,但Gradle遵循许多与Maven相同的约定(例如标准项目结构),并且其依赖项管理以类似的方式工作。

    注意:建议前期保持gradle和maven的并行,直到熟练掌握gradle的构建之后,才尝试完全替换

    迁移步骤
    1. 创建一个Maven构建扫描

      能够更容易可视化现有Maven构建中发生的情况。熟悉原有的maven项目的所有项目结构、依赖关系、插件。以便可以将其与转换项目时获得的Gradle构建扫描进行比较。

    2. 开发一种机制来验证两个构建产生相同的功能包

      这是确保部署和测试不中断的至关重要的一步。即使是很小的更改,例如JAR中清单文件的内容,也会引起问题。如果Gradle构建生成的输出与Maven构建生成的输出相同,则这将对切换充满信心,并使更容易实施将带来最大收益的重大更改。

      这并不意味着需要在每个阶段都验证每个工件,尽管这样做可以帮助快速确定问题的根源。可以只关注关键输出,例如最终报告以及已发布或部署的工件。

      与Maven相比,您需要考虑Gradle产生的构建输出中的某些固有差异。生成的POM将仅包含消耗所需的信息,并且它们将针对该方案正确使用范围。您可能还会看到存档中文件和类路径中文件顺序的差异。大多数差异都是良性的,但值得识别它们并确认它们是可以的。

    3. 运行自动转换

      这将创建需要的所有Gradle构建文件,即使对于多模块构建也是如此。对于更简单的Maven项目,Gradle构建将可以运行!

    4. 为Gradle构建创建构建扫描

      构建扫描将使可视化构建中的事情变得更加容易。对于Gradle构建,能够查看项目结构,依赖关系(常规和项目间的依赖关系),正在使用的插件以及构建的控制台输出。

      此时构建可能会失败,但是没关系;扫描仍将运行。将Gradle生成的生成扫描与Maven生成的生成扫描进行比较,然后继续执行此列表以排除故障。

      建议在迁移过程中定期生成构建扫描,以帮助确定问题并排除故障。如果愿意,还可以使用Gradle构建扫描来确定提高构建性能的机会,毕竟,性能首先是切换到Gradle的主要原因。

    5. 验证依赖修复问题

    6. 配置集成和功能测试

      通过配置额外的源集,可以简单地迁移许多测试。

    7. 用Gradle等效插件替换Maven插件

      后续,我们会去了解常见的替换

    理解构建生命周期

    Maven构建基于构建生命周期的概念,该概念由一组固定阶段组成。这可能会成为用户迁移到Gradle的障碍,因为它的构建生命周期有所不同,尽管了解Gradle的构建方式如何适合初始化,配置和执行阶段的结构很重要。幸运的是,Gradle具有可以模仿Maven各个阶段的功能:生命周期任务。

    使Maven用户更轻松地过渡到Gradle,Base插件-由所有JVM语言应用诸如Java库插件之类的插件提供了一组与主要Maven阶段相对应的生命周期任务。

    maven命令gradle任务备注
    cleancleanBase插件库中提供
    compileclassesJava插件库中提供
    testtestJava插件库中提供,它仅运行单元测试,或更具体地说,运行组成测试源集的测试。
    packageassembleBase插件库中提供
    verifycheckBase插件库中提供
    installpublishToMavenLocalMaven 发布插件库中提供
    deploypublishMaven 发布插件库中提供

    执行自动转换

    Gradle的init任务通常用于创建新的骨架项目,但也可以使用它将现有的Maven构建自动转换为Gradle。将Gradle安装到系统上后,只需执行以下命令

    > gradle init

    在根项目目录,使用Gradle命令执行初始化任务。这基本上包括解析现有的POM并生成相应的Gradle构建脚本。如果迁移多项目版本,Gradle还将创建一个设置脚本。

    新的Gradle构建包括以下内容:

    • POM中指定的所有自定义存储库

    • 外部和项目间依赖

    • 用于构建项目的适当插件(仅限于Maven Publish,Java和War插件中的一个或多个)

    后续会详细了解如何构建初始化插件

    可以执行命令,完成构建

    > gradle build

    迁移完成后。这将运行测试并产生所需的组件,而您无需任何额外干预。

    依赖移植

    Gradle的依赖关系管理系统比Maven的依赖项管理系统更灵活,但它仍支持相同的库,声明的依赖关系,范围(Gradle中的依赖关系配置)和可传递依赖关系的概念。实际上,Gradle与兼容Maven的存储库完美配合,这使得迁移依赖关系变得容易。

    注:两种工具之间的显着区别是它们如何管理版本冲突。Maven使用“最接近”的匹配算法,而Gradle选择最新的匹配算法。不过放心,可以自主控制选择哪些版本,如管理传递性依赖项中所述。

    依赖声明

    Gradle使用与Maven相同的依赖项标识符组件:group ID, artifact ID and version。它还支持分类器。因此,需要做的就是将标识符的依赖项信息替换为Gradle的语法

    以Log4J举例说明,Maven依赖:

    <dependencies>    <dependency>        <groupId>log4jgroupId>        <artifactId>log4jartifactId>        <version>1.2.12version>    dependency>dependencies>

    对应的Gradle构建脚本配置如下:

    Groovy build.gradle

    dependencies {    implementation 'log4j:log4j:1.2.12'  }

    Kotlin build.gradle.kts

    dependencies {    implementation("log4j:log4j:1.2.12")  }

    Maven三元素为 groupId artifactId version,对应的Gradle为  group, module version.

    默认作用域为,Maven的compile

    Maven的作用域与Gradle的标准配置之间的一些区别归结为Gradle区分了构建模块所需的依赖性和构建依赖于该模块的模块所需的依赖性。Maven没有这种区别。

    以下是主要的Maven依赖范围以及如何处理它们的迁移:

    compile

    Gradle具有两种可用于代替compile范围的配置:implementationapi。前者适用于所有应用Java插件的项目,而api仅适用于专门应用Java库插件的项目。

    在大多数情况下,只需使用implementation配置,尤其是在构建应用程序或网络应用程序时。但是,如果您要构建Java库,则可以在构建Java库的部分中了解使用api声明哪些依赖项。

    runtime

    使用runtimeOnly配置

    test

    Gradle区分了编译项目测试所需的那些依赖项和仅运行它们所需的那些依赖项。

    应针对testImplementation配置声明测试编译所需的依赖关系。仅运行测试所需的那些应该使用testRuntimeOnly

    provided

    使用compileOnly配置。

    请注意,War插件添加了providerCompileproviderRuntime依赖项配置。它们的行为与compileOnly略有不同,只需确保这些依赖关系未打包在WAR文件中。但是,依赖项包括在运行时和测试运行时类路径中,因此,如果需要,请使用这些配置。

    import

    Gradle可以通过基于platform()和forcedPlatform()方法的特殊依赖项语法,将此类BOM用于相同的目的。

    dependencies {    implementation platform('org.springframework.boot:spring-boot-dependencies:1.5.8.RELEASE')    implementation 'com.google.code.gson:gson'     implementation 'dom4j:dom4j'}

    多模块迁移

    Maven的多模块能够很容易迁移到Gradle的多项目构建

    1. 创建一个与根POM的块匹配的设置脚本。

      例如,以下块:

      <modules>    <module>simple-weathermodule>    <module>simple-webappmodule>modules>

      可以通过在设置脚本中添加以下行来迁移:

      例如:

      Groovy settings.gradle

      rootProject.name = 'simple-multi-module'  include 'simple-weather', 'simple-webapp'
      > gradle projectsinclude::{snippetsPath}/mavenMigration/multiModule/tests/projects.out
    2. 用项目依赖项替换跨模块依赖项

      软件项目通常将软件组件分解为模块,以提高可维护性并防止强耦合。模块可以定义彼此之间的依赖关系,以在同一项目中重用代码

      Groovy build.gradle

      dependencies {    implementation project(':shared')}

      根据  web-service 项目构建

      project(':web-service') {    dependencies {        implementation project(':utils')        implementation project(':api')    }}

      6af798262f566e7a2a6fc47a6526b5d5.png

    3. 使用跨项目配置复制项目继承

    注:详细的内容,可以参考下官方文档,此处还是比较难的。

    迁移Maven配置文件和属性

    Maven允许使用各种属性对构建进行参数化。一些是项目模型的只读属性,其他是用户在POM中定义的属性。它甚至允许将系统属性视为项目属性。

    过滤资源

    Maven有一个称为process-resources的阶段,该阶段具有目标资源:默认情况下绑定到它的资源

    Gradle的Java插件提供了processResources任务来执行相同的操作。这是一个复制任务,可将文件从配置的资源目录(默认情况下为src / main / resources)复制到输出目录。与任何复制任务一样,您可以对其进行配置以执行文件过滤,重命名和内容过滤

    processResources {    expand(version: version, buildNumber: currentBuildNumber)}

    移植公共插件

    Maven和Gradle共享一种通过插件扩展构建的通用方法。尽管表面上的插件系统有很大不同,但是它们共享许多基于功能的插件,例如:

    • Shade/Shadow

    • Jetty

    • Checkstyle

    • JaCoCo

    • AntRun (see further down)

    以checkstyle插件为例,Maven

    ...<plugin>  <groupId>org.apache.maven.pluginsgroupId>  <artifactId>maven-checkstyle-pluginartifactId>  <version>2.17version>  <executions>    <execution>      <id>validateid>      <phase>validatephase>      <configuration>        <configLocation>checkstyle.xmlconfigLocation>        <encoding>UTF-8encoding>        <consoleOutput>trueconsoleOutput>        <failsOnError>truefailsOnError>        <linkXRef>falselinkXRef>      configuration>      <goals>        <goal>checkgoal>      goals>    execution>  executions>plugin>...

    迁移到Gradle时,可以安全地忽略配置块之外的所有内容。在这种情况下,相应的Gradle配置如下所示:

    checkstyle {    config = resources.text.fromFile('checkstyle.xml', 'UTF-8')    showViolations = true    ignoreFailures = false}

    总结

    本篇内容,我们聊了maven到gradle移植过程中的奇奇怪怪的事情。基本上涵盖,但是具体的内容,还需要对应的去了解,仔细点研究。

    7d658fd210139eac474eeece7ff4fec6.gif

    0c67c291dae33cb9af6854ab9c97ece9.png

    展开全文
  • 我不知道你们中有多少人,但它经常发生在我身上。 因此,我想到了这个应用程序,该应用程序一旦获得了所有必需的数据,就会提醒您作业的截止日期,即将举行的考试和未完成的作业。 因此,您可以相应地计划时间表。 ...
  • 但是,由于我经常使用此存储库并赋予它相当大的重要性,因此此处有价值的所有内容迟早都可能会被转移。 旧的自述文件 C,C ++,POSIX和Linux系统编程的最少示例。 尽可能使用断言。 酷第三方库和构建系统的世界。 ...
  • 外汇管理

    千次阅读 2005-04-07 22:35:00
    外汇管理 一、外汇管理制度概述外汇管理是指一国政府授权国家货币金融管理当局或其他国家机关,对外汇收支、买卖、借贷、转移以及国际间的结算、外汇汇率和外汇市场等实行的管制措施。我国外汇管理的主管机关为国家...
            外汇管理

      一、外汇管理制度概述外汇管理是指一国政府授权国家货币金融管理当局或其他国家机关,对外汇收支、买卖、借贷、转移以及国际间的结算、外汇汇率和外汇市场等实行的管制措施。我国外汇管理的主管机关为国家外汇管理局。

      我国逐步确立了建立在市场汇率基础上的、以经常项目可兑换,资本项目外汇管制为特征的外汇管理框架。实现了人民币经常项目可兑换,逐步建立了符合社会主义市场经济要求的外汇管理体制。具体而言,中国的外汇管理制度形成了以下的基本框架和发展方向:(1)坚持人民币经常项目可兑换。经常项目外汇收入实行银行结汇制度;取消经常项目外汇支付限制;实行进出口收付汇核销制度;通过进出口报关单联网核查系统进行贸易真实性审核。(2)严格资本项目外汇管理。中国对资本项目外汇收支管理的基本原则是,在取消经常项目汇兑限制的同时,完善资本项目外汇管理,逐步创造条件,有序地推进人民币在资本项目下可兑换。(3)不断改进人民币汇率的形成机制。(4)不断完善国际收支宏观管理体系。(5)加强对金融机构外汇业务的监督和管理。(6)逐步建立适应社会主义市场经济的外汇管理法规体系。

      由于与对外贸易密切相关的是经常项目下的贸易外汇管理,所以本讲主要介绍贸易外汇管理制度。

      二、贸易外汇管理制度(一)贸易外汇管理原则一是境内机构的经常项目外汇收入必须调回境内,不得违反国家有关规定将外汇擅自存放在境外;二是对贸易项下外汇支付不予限制,境内机构贸易项下用汇可以按照市场汇率凭相应的有效凭证和商业单据,用人民币向外汇指定银行购汇或从其外汇账户上对外支付;三是实行以事后监管为主的真实性审核,通过对银行付汇数据和进口报关到货数据的核对,审核进口付汇的贸易真实性;以出口收汇核销单为依据对出口外汇收入的真实性进行事后核查。

      与贸易外汇管理原则相适应,我国贸易外汇管理是以间接管理和事后检查监督管理为主,具体表现为实行银行结汇制、银行售付汇制、出口收汇核销制度、进口付汇核销制度等管理制度。

      (二)银行结汇制度我国对境内机构经常项目下的贸易外汇收入实施银行结汇制度,即境内机构贸易项下的外汇收入,除国家规定准许保留的外汇可以在外汇指定银行开立外汇账户外,都必须及时调回境内,按市场汇率卖给外汇指定银行。

      凡经商务部备案具有对外贸易经营权或有经常项目外汇收入的境内机构(含外商投资企业),均可以向所在地国家外汇管理局及其分支局(以下简称外汇局)申请开立经常项目外汇账户。境内机构经常项目外汇账户的收入范围为经常项目外汇收入,支出范围为经常项目外汇支出及经外汇局核准的资本项目外汇支出。境内机构经常项目外汇账户的限额,原则上按照其上年度经常项目外汇收入的20%核定。境内机构经常项目外汇收入,在外汇局核定的经常项目外汇账户限额以内的,可以结汇,也可以存入其经常项目外汇账户;超出外汇局核定的经常项目外汇账户限额的外汇收入必须结汇。个人对外贸易经营者从事对外货物贸易经营活动,可以直接到银行办理购汇对外支付、结汇手续,也可以通过个人对外贸易结算账户办理。

      (三)银行售付汇制度我国对境内机构经常项目下的贸易外汇支出实施银行售付汇制度。

      1.售汇制度售汇是指外汇指定银行将外汇卖给外汇使用者,并根据交易行为发生之日的人民币汇率收取等值人民币的行为。从用汇单位角度来讲,售汇又称为购汇。我国的企业经常项目下产生的外汇需求,只要能够提供与支付手段相应的有效商业单据和凭证(例如进口合同、进口付汇核销单及形式发票等单据和凭证,以及在有许可证管理或其他管理措施时要提交进口许可证、技术进口合同登记证书等有关部门签发的进口证明文件),就可以从外汇指定银行购买外汇。

      2.付汇制度付汇是指经批准经营外汇业务的金融机构,根据有关售汇以及付汇的管理规定,在审核用汇单位或个人提供的规定的有效凭证和商业单据后,从用汇单位或个人的外汇账户中或将其购买的外汇向境外支付的行为。如从其外汇账户中对外支付,用汇单位或个人除提交规定的有效凭证及商业单据外,还必须符合外汇账户的收支范围。

      (四)出口收汇核销制度1.出口收汇核销制度的含义根据《外汇管理条例》及有关规定,境内出口单位或个人向境外出口货物,均应当办理出口收汇核销手续。出口收汇核销制度是指国家外汇管理部门根据国家外汇管制的要求,通过海关对出口货物的监管,对出口单位的收汇是否按规定结汇给国家而进行监督的一种管理制度。这是一种以出口货物价值为标准核对是否有相应的外汇收回国内的事后管理措施,可以监督企业在货物出口后及时、足额地收回货款。

      2.出口收汇核销的凭证出口收汇核销的凭证是“出口收汇核销单”。出口收汇核销单,系指由外汇局制定格式,出口单位或个人凭以向海关出口报关,向外汇指定银行办理出口收汇,向外汇局办理出口收汇核销,向税务机关办理出口退税申报的有统一编号的凭证。它是出口收汇管理中最主要的一份单据,也是海关直接审核并签章的单据。在口岸电子执法系统网络上登记有电子底账的出口收汇核销单,将长期有效。出口收汇核销单只准本单位使用,不得借用、冒用、转让和买卖。

      3.出口核销的办理出口单位或个人应凭申请书、工商营业执照副本、海关注册登记证书、出口合同、商务部相关批准文件,到当地外汇管理部门办理登记手续,申领经外汇管理部门加盖“监督收汇”章的出口收汇核销单。出口收汇核销工作遵循属地管理原则,即出口单位登记、领单和核销等均应当在其注册所在地外汇局办理。

      海关凭出口收汇核销单和相关单据受理报关,审核无误后办理通关手续。在货物实际出境后,海关在出口收汇核销单的“海关核放情况”栏里签注意见并加盖“验讫章”,同时向出口单位签发计算机打印的、盖有“验讫章”的出口货物报关单,交出口单位向外汇管理部门办理核销。

      企业在货物出口报关后,可以利用口岸电子执法系统在网上向外汇局交单。待收汇后,企业可持出口收汇核销单、出口报关单、发票、出口收汇核销专用联等规定的有效凭证一并到外汇局办理核销手续。

      (五)进口付汇核销制度1.进口付汇核销制度的含义获得对外贸易经营权的单位或个人,以通过银行购汇或从外汇账户支付的方式,向境外支付有关进口商品的各类款项(即进口付汇),均应向外汇管理部门办理进口付汇的核销手续。

      进口付汇核销制度是指进口货款付出后,由外汇管理部门对相应的到货进行核销。这是以付汇金额为标准核对是否有相应的货物进口到国内或有付汇真实性的其他证明的一种事后管理措施,可以监督企业进口付汇后及时、足额地收到货物。

      外汇局负责所有进口付汇的核销、检查和管理,并对进口单位和外汇指定银行进行监督、检查。外汇指定银行应当向所在地外汇局报送进口付汇核销单及有关报表,对外付汇的进口单位或个人应当向所在地外汇局办理进口付汇核销报审手续。

      2.进口付汇核销的凭证进口付汇核销主要使用“进口付汇核销单”进行核销。“贸易进口付汇核销单”(代申报单)系指由国家外汇局制定格式,进口单位或个人填写,外汇指定银行审核并凭以办理进口付汇的凭证。一份进口付汇核销单只可凭以办理一次付汇。企业凭“进口付汇核销单”办理有关进口货物的通关手续。

      3.进口付汇核销的办理进口单位办理付汇时应当按规定如实填写进口付汇核销单,属于货到汇款的还应当填写有关“进口货物报关单”编号和报关的币种、金额,将进口付汇核销单连同其它付汇单证一并送外汇指定银行审核。

      货到汇款项下贸易进口付汇采取自动核销管理,即进口单位在外汇银行办理货到汇款项下贸易进口付汇业务的同时,履行进口付汇申报及到货报审义务,外汇局通过事后审核自动完成货到汇款项下贸易进口付汇核销工作。外汇银行应严格按照规定的要求为进口单位办理自动核销业务,及时、准确、完整地向所在地外汇局报送进口单位付汇及商品到货的电子信息和纸质的贸易进口付汇核销单。

      其它结算方式项下的进口付汇由进口单位凭进口付汇核销单、备案表、正本进口货物报关单(转口贸易项下的进口付汇凭转口所得的结汇水单)直接向外汇局办理核销报审手续。

    对外经济贸易大学人文与行政管理学院 王春蕊

    2005-3-11 7:25:

    展开全文
  • 终于有了苹果设计的处理器支持的第一批Mac。从外部来看,它们几乎取代了要更换的基于Intel的Mac。...但是,规格表上可能需要从旧的思维方式中最大转移项目是系统内存。这项功能已经经常被人们误解(并

    终于有了苹果设计的处理器支持的第一批Mac。从外部来看,它们几乎取代了要更换的基于Intel的Mac。在这里插入图片描述

    但在内部,它们不像其他计算机。通过多年的iPhone和iPad迭代学习,Apple首次将其系统设计方法引入了Mac。

    我们中那些习惯于以某些术语思考个人计算机的人将需要适应这一新现实。在这个世界里,苹果公司出售了三种不同的Mac机型,甚至没有公开内部处理器的时钟速度。(毕竟,它不适用于iPhone或iPad。)

    但是,规格表上可能需要从旧的思维方式中最大转移的项目是系统内存。这项功能已经经常被人们误解(并经常与存储容量相混淆),现在带有苹果芯片的Mac正在以完全不同的方式使用它。

    RAM的旧思维方式已经过去。欢迎来到统一内存体系结构的世界。

    包装的一部分

    像具有集成显卡的英特尔芯片一样,M1芯片也包含图形处理器,并且处理器核心和图形核心都共享系统内存。(而且,在M1的情况下,也是构成神经引擎的核心。)但是,在改变其术语以描述统一的内存体系结构时,Apple试图指出M1的方法有些不同。

    最大的区别在于,在M1中,内存是M1体系结构本身的一部分。M1 Mac的主板上没有内存插槽,也没有永久性焊接内存芯片的区域。而是将内存集成到包含M1本身的同一包中。

    这意味着当您购买基于M1的Mac并选择内存配置时,就是这样。还有许多其他的Mac,它们的焊接内存无法升级,但这有所不同,因为内存基本上是M1软件包本身的一部分。

    从第一轮M1 Mac来看,M1似乎只能使用8GB或16GB的内存。这实际上可能不是硬性限制-也许苹果公司为了限制这些低端系统而坚持了下来。但是,除非苹果提供更高端的M1版本,否则我们不太可能看到Mac运行超过16GB的苹果芯片。

    统一的好处

    但是苹果并不是故意将内存集成到其片上系统中。之所以这样做,是因为它可以带来巨大的速度优势。

    M1处理器的内存是单个池,处理器的任何部分都可以访问。如果系统需要更多的图形内存,则可以分配该内存。同样,如果它需要更多的神经引擎内存。更好的是,因为处理器的所有方面都可以访问所有系统内存,所以当图形内核需要访问以前由处理器内核访问的内容时,性能不会受到影响。在其他系统上,必须将数据从内存的一部分复制到另一部分,但是在M1上,可以立即访问。

    从它们的方式来看,这些新的Mac有点像外星人。个人计算机的传统是一切都是模块化的,这是早期PC时代的产物。尽管Mac从未参与过PC的构建,但Apple用来组装Mac的零件却来自该行业。与智能手机相比,苹果一直在将智能手机的更多部分集成到其单处理器软件包中,以提高效率。这些新的Mac更像是智能手机,而不是传统的PC。

    你需要它吗?

    关于第一轮M1 Mac,我所看到的最大批评之一就是它们没有提供足够的内存,最大可达到16GB。请记住,这些是性能最低的Mac机型,未来的机型可能会提供更多RAM选项。

    但是,值得一提的是,当您戳一下它时,对多出更多内存的需求可能会有多松散。当然,很多人认为他们需要它-真的吗?

    是的,当Mac上的物理内存用完时,它将页面中的内容分页到磁盘上-甚至超高速SSD都比主内存慢!尽管速度差异远小于使用慢速旋转磁盘驱动器时的速度差异。

    是什么原因导致Mac的物理内存不足?如果您一次打开了很多应用程序,或者浏览器打开了数百个选项卡,或者您使用的应用程序将非常大的文件(例如Photoshop文件)加载到内存中。如果您经常执行此操作,则可能需要更多的内存…。但是,如果您经常执行此操作,则可能不想立即购买一台M1 Mac。无疑将在明年推出中端和高端机型,这些机型无疑将提供更多的RAM选项和更多的处理器功能。

    但是,如果您将统一内存架构的效率与SSD存储的速度结合在一起,并考虑大多数日常使用案例,那么我很确定大多数普通用户都可以使用8GB统一内存,或者,如果您愿意绝对可以,将其升级到16GB。(我做到了。)

    下一步是什么?

    无法想象2021年会过去,而没有苹果推出具有更强大处理器和更多内存选项的新Mac。至少高端MacBook Pro和iMac可以使用更新,这些更新提供了基本M1以外的某些选项。

    从长远来看,苹果是否有可能使用带有自己专用内存的外部图形处理器来构建系统?这似乎是不可避免的,至少在高端市场是这样—如果您不能在其中插入可笑的图形卡,那么Mac Pro是什么呢?

    但是,苹果也很可能会在扩大处理器规模时继续扩大内存选项,在增加内核时增加内存,而这些芯片可能是大多数Mac型号中提供的芯片。

    M1中的统一内存架构是这些Mac如此之快的原因之一-但所有Mac用户都将不得不放弃我们对计算机如何工作以及如何配置的一些假设。而且,如果您真的舍不得购买只有16GB RAM的Mac,请不要生气-耐心等待。更多的Apple Mac正在生产中。

    展开全文
  • 示例:两个或更多朋友以共同的预算参加ICO,而成功的一个必须将硬币转移其他人。 将MyEthBook用于经常使用的地址-您不记得所有朋友的电话号码了吗? 最终目标将是充当钱包,账簿和投资组合的以太坊书->将...
  • 文档要怎么写?

    千次阅读 2014-08-07 19:00:14
    最近给运维人员写了一份部署三个项目的文档,由于系统需要和其他两个系统交互,所以在配置方面复杂了些,尤其是对xml文件地址配置这块,经常出问题。当基本功能实现的时候,给运维人员去部署的时候,写文档不单单是...
  • PostgreSQL v9.3 For Win.zip

    2019-07-17 19:38:30
    它也经常被简略念为 "postgres"。   PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES,版本 4.2为基础的对象关系型数据库管理系统(ORDBMS)。PostgreSQL支持大部分 SQL标准并且提供了许多其他现代特性...
  • 2. 将配置文件转移到 ~/.douban.fm.profile.json 所以之前已经安装过的同学需要重新配置一下账户 douban.fm config 更新豆瓣电台命令行版本: $ [sudo] npm install douban.fm -g</p><p>该提问来源于开源项目&...
  • 软件工程教程

    热门讨论 2012-07-06 23:10:29
    项目是一个能提高用户参与和娱乐程序的项目,具有一定的使用价值。 追求的结果--钢琴练奏师 1.2 项目背景 传统的音乐播放器功能单一,用户对音乐缺少参与感,本项目志在提高用户对音乐的学习和娱乐,参与创作...
  • Maven2 的新特性.7z

    2013-04-15 14:55:38
    2002年开始使用Java,在平时的项目开发中经常采用OpenSource的工具,如Ant、Maven、Hibernate、Struts等,目前正在研究信息集成方面的规范和技术。可以通过jianhgreat@hotmail.com与他取得联系,或访问个人blog:...
  • 松弛的渠道对于经理和参与多个项目其他人来说甚至更糟。即便是对Slack的适度使用,每天导致的频道消息也比大多数经理有时间处理的消息还要多。 实际上,在使用Slack的组织中,许多高级人员(明智地)根本不阅读...
  • (2)资料转移功能,转移常见个人资料到非系统盘,如果判定到目标盘不可用则不执行转移工作。 (3)IP设定功能,让您快速的配置适合您网络环境的常用网络项目。 (4)其他小功能,方便您的日常操作。 12、部署任务...
  • Tepper.Cindy在周末经常开着她的越野摩托(目前是一辆2004年款的本田CRF250X)赛车.你可以从Cindy的网站联系到她:http://cindygross.spaces.live.com/ 目录 封面 -13 封底 -12 扉页 -11 版权 -10 版权声明 -9 ...
  • Tepper.Cindy在周末经常开着她的越野摩托(目前是一辆2004年款的本田CRF250X)赛车.你可以从Cindy的网站联系到她:http://cindygross.spaces.live.com/ 目录 封面 -13 封底 -12 扉页 -11 版权 -10 版权声明 -9 ...
  • (2)资料转移功能,转移常见个人资料到非系统盘,如果判定到目标盘不可用则不执行转移工作。 (3)IP设定功能,让您快速的配置适合您网络环境的常用网络项目。 (4)其他小功能,方便您的日常操作。 12、部署任务...
  • Apache Sqoop: 是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中 ...
  • 因为所编写的资料将必然会被证实其他项目中是有价值的。? 下述编号的活动与表20.9.2的系统开发责任矩阵相对应。? (1)提交服务请求? 图20.5.1说明了包括对受拒绝的请求再次请求处理的一种方法。所请求的服务毕竟是...
  • 13、路由策略:执行器集群部署时提供丰富的路由策略,包括:第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移、忙碌转移等; 14、分片广播任务:执行器集群部署时,任务路由策略...
  • 7、路由策略:执行器集群部署时提供丰富的路由策略,包括:第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移、忙碌转移等; 8、故障转移:任务路由策略选择"故障转移"情况下,...
  • 项目立足医药领域,以垂直型医药网站为数据来源,以疾病为核心,构建起一个包含7类规模为4.4万的知识实体,11类规模约30万实体关系的知识图谱。 本项目将包括以下两部分的内容: 基于垂直网站数据的医药知识图谱...
  • 不过,表中各个项目的研究重点轮廓分明,足以成为分类的根据。 既然传统经济学的各个领域同企业都有某种程度的关系,管理经济学当然要从所有这些领域中汲取有用的东西。各个领域同企业关系实际上深浅不一,这些...
  • iPhone开发秘籍(第2版)--详细书签版

    热门讨论 2012-12-11 13:42:25
    2.15.3 在项目中添加授权文件 64 2.15.4 在设置中添加授权文件 64 2.15.5 构建临时应用程序 65 2.15.6 为临时发布添加图片 65 2.16 定制Xcode标识 66 2.17 创建自定义Xcode模板 66 2.17.1 覆盖...
  • iPhone开发秘籍(第2版)--源代码

    热门讨论 2012-12-11 13:51:22
    2.15.3 在项目中添加授权文件 64 2.15.4 在设置中添加授权文件 64 2.15.5 构建临时应用程序 65 2.15.6 为临时发布添加图片 65 2.16 定制Xcode标识 66 2.17 创建自定义Xcode模板 66 2.17.1 覆盖...
  • 已经满了,它甚至可能已经被转移到硬盘上!由于这类地址不必反映内存所在的物理位置,所以它们被称为虚拟内存。操作系统维持着一个虚拟地址到物理地址的转换的表,以便计算机硬件可以正确地响应地址请求。并且,...
  • 操作系统(内存管理)

    热门讨论 2009-09-20 12:55:25
    实际上,它甚至可以不在 RAM 中 —— 如果物理 RAM 已经满了,它甚至可能已经被转移到硬盘上!由于这类地址不必反映内存所在的物理位置,所以它们被称为虚拟内存。操作系统维持着一个虚拟地址到物理地址的转换的表,...

空空如也

空空如也

1 2
收藏数 39
精华内容 15
关键字:

其他经常转移项目