`
Donald_Draper
  • 浏览: 980043 次
社区版块
存档分类
最新评论

从github检出netty项目,编译遇到问题总结

阅读更多
Maven学习记录3——创建、编译、打包、运行项目 :http://blog.csdn.net/yaya1943/article/details/48464371
使用maven编译Java项目:http://www.tuicool.com/articles/YfIfIrq
netty github 导入 Eclipse:http://www.th7.cn/Program/java/201502/389732.shtml
netty源码编译环境搭建 :http://blog.csdn.net/wuyinxian/article/details/46382051
Plugin error: execution not covered by lifecycle configuration:
https://stackoverflow.com/questions/7391201/plugin-error-execution-not-covered-by-lifecycle-configuration
Execution Not Covered:http://www.eclipse.org/m2e/documentation/m2e-execution-not-covered.html
netty项目github地址:https://github.com/netty/netty.git
       由于netty项目在github中,没有.project和.classpath文件,所以不能够直接转换为eclipse工程Maven项目,要手动去编译,具体可参考netty源码编译环境搭建和netty github导入Eclipse这两篇文章。
我们总结一下从github检出netty项目,编译maven项目,主要遇到的问题:
1.Failure to transfer io.netty:netty-tcnative:jar:${tcnative.classifier}:2.0.3.Final
这个问题主要是tcnative jar在netty-parent:
<groupId>io.netty</groupId>
<artifactId>netty-parent</artifactId>
<packaging>pom</packaging>
<version>4.1.13.Final-SNAPSHOT</version>

的POM中定义了如下片段:
<tcnative.artifactId>netty-tcnative</tcnative.artifactId>
<tcnative.version>2.0.3.Final</tcnative.version>
<tcnative.classifier>${os.detected.classifier}</tcnative.classifier>

根据操作系统探测tcnative的classifier,我们只需要将上面这句话注释掉如下:
<!-- <tcnative.classifier>${os.detected.classifier}</tcnative.classifier> -->

同时在相应子模块项目中,tcnative包依赖中将:
<dependency>
  <groupId>${project.groupId}</groupId>
  <artifactId>${tcnative.artifactId}</artifactId>
  <classifier>${tcnative.classifier}</classifier>
  <optional>true</optional>
</dependency>

改为:
<dependency>
  <groupId>${project.groupId}</groupId>
  <artifactId>${tcnative.artifactId}</artifactId>
  <!-- <classifier>${tcnative.classifier}</classifier> -->
  <version>${tcnative.version}</version>
  <optional>true</optional>
</dependency>

这里我们是以netty-handler子模块为例:
<parent>
  <groupId>io.netty</groupId>
  <artifactId>netty-parent</artifactId>
  <version>4.1.13.Final-SNAPSHOT</version>
</parent>
<artifactId>netty-handler</artifactId>
<packaging>jar</packaging>

2.Plugin execution not covered by lifecycle configuration:
org.codehaus.mojo:build-helper-maven-plugin:1.10:add-source
(execution: add-source, phase: generate-sources)

这个问题主要是执行不能被声明周期配置覆盖导致,我们以netty-common子模块为例:
 <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>1.10</version>
        <executions>
          <execution>
            <id>add-source</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>add-source</goal>
            </goals>
            <configuration>
              <sources>
                <source>${collection.src.dir}</source>
              </sources>
            </configuration>
          </execution>
 </plugin>

groupId为org.codehaus.mojo,artifactId为build-helper-maven-plugin的add-source执行不行被生命周期覆盖,解决方式,在pom文件的build标签下加入pluginManagement对应的片段:
<build>
  <pluginManagement>
	    <plugins>
	       <plugin>
		     <groupId>org.eclipse.m2e</groupId>
		     <artifactId>lifecycle-mapping</artifactId>
		     <version>1.0.0</version>
		     <configuration>
		       <lifecycleMappingMetadata>
		         <pluginExecutions>
		          <!-- plugin执行器过滤器 -->
		           <pluginExecution>
		             <!-- plugin执行器过滤器 -->
		             <pluginExecutionFilter>
			       <!-- 这里的groupId和artifactId和上面的相对应 -->
		               <groupId>org.codehaus.mojo</groupId>
		               <artifactId>build-helper-maven-plugin</artifactId>
			       <!--  版本大于等于1.0.0 -->
		               <versionRange>[1.0.0,)</versionRange>
		               <goals>
			          <!--  目标与上面对应者execution goals中goal -->
		                  <goal>add-source</goal>
		                  <goal>add-test-source</goal>
		               </goals>
		             </pluginExecutionFilter>
		               <!-- plugin执行器忽略 groupId,artifactId 对应的goals中goal -->
		             <action>
			        <!--忽略执行 -->
		               <ignore/>
		             </action>
		           </pluginExecution>
		          <!-- plugin执行器过滤器 -->
		           <pluginExecution>
		             <!-- plugin执行器过滤器 -->
		             <pluginExecutionFilter>
		               <groupId>org.codehaus.mojo</groupId>
		               <artifactId>xml-maven-plugin</artifactId>
		               <versionRange>[1.0.0,)</versionRange>
		               <goals>
		                  <goal>parse-version</goal>
		                  <goal>check-style</goal>
		               </goals>
		             </pluginExecutionFilter>
		               <!-- plugin执行器忽略 groupId,artifactId 对应的goals中goal -->
		             <action>
		               <ignore/>
		             </action>
		           </pluginExecution>
		           <!-- plugin执行器过滤器 -->
		           <pluginExecution>
		             <!-- plugin执行器过滤器 -->
		             <pluginExecutionFilter>
		               <groupId>org.codehaus.gmaven</groupId>
		               <artifactId>groovy-maven-plugin</artifactId>
		               <versionRange>[1.0.0,)</versionRange>
		               <goals>
		                  <goal>execute</goal>
		               </goals>
		             </pluginExecutionFilter>
		               <!-- plugin执行器忽略 groupId,artifactId 对应的goals中goal -->
		             <action>
		               <ignore/>
		             </action>
		           </pluginExecution>
		         </pluginExecutions>
		       </lifecycleMappingMetadata>
		     </configuration>
		    </plugin>
		   </plugins>
	   </pluginManagement>
</build>

还有一种方式为配置Maven -> Lifecycle mapping->lifecycle-mapping-metadata.xml ,
官方显示这种方法针对Eclipse 4.2,具体配置在Windows -> Preferences -> Maven -> Lifecycle mapping ,文件(eclipse/plugins/org.eclipse.m2e.lifecyclemapping.defaults_1.2.0.20120903-1050.jar/lifecycle-mapping-metadata.xml)内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<lifecycleMappingMetadata>
  <pluginExecutions>
    <pluginExecution>
      <pluginExecutionFilter>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>buildnumber-maven-plugin</artifactId>
        <goals>
          <goal>create-timestamp</goal>
        </goals>
        <versionRange>[0.0,)</versionRange>
      </pluginExecutionFilter>
      <action>
        <ignore />
      </action>
    </pluginExecution>

    <pluginExecution>
      <pluginExecutionFilter>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <goals>
          <goal>list</goal>
        </goals>
        <versionRange>[0.0,)</versionRange>
      </pluginExecutionFilter>
      <action>
        <ignore />
      </action>
    </pluginExecution>

    <pluginExecution>
      <pluginExecutionFilter>
        <groupId>org.zeroturnaround</groupId>
        <artifactId>jrebel-maven-plugin</artifactId>
        <goals>
          <goal>generate</goal>
        </goals>
        <versionRange>[0.0,)</versionRange>
      </pluginExecutionFilter>
      <action>
        <ignore />
      </action>
    </pluginExecution>

    <pluginExecution>
      <pluginExecutionFilter>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>gwt-maven-plugin</artifactId>
        <goals>
          <goal>compile</goal>
        </goals>
        <versionRange>[0.0,)</versionRange>
      </pluginExecutionFilter>
      <action>
        <ignore />
      </action>
    </pluginExecution>

    <pluginExecution>
      <pluginExecutionFilter>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <goals>
          <goal>copy-dependencies</goal>
          <goal>unpack</goal>
        </goals>
        <versionRange>[0.0,)</versionRange>
      </pluginExecutionFilter>
      <action>
        <ignore />
      </action>
    </pluginExecution>
  </pluginExecutions>
</lifecycleMappingMetadata>

注意:pluginExecutionFilter中的groupId,artifactId,goal的对应关系。

    在配置完后记得要重新加载。如果你有多个Eclipse工作空间或者为一个团队项目,强烈建立使用配置POM文件的方式,,即第一种方式。

然后更新项目模块(maven-》update勾选force online update)。

如果还有问题,看看是不是JRE的原因(JRE6-8),一般为JRE7,

如果项目没有maven依赖包(Maven Dependencies),查看项目的.class
和.project文件
.class文件是否包含如下信息:
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.7.0_17">
	<attributes>
		<attribute name="maven.pomderived" value="true"/>
	</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
	<attributes>
		<attribute name="maven.pomderived" value="true"/>
	</attributes>
</classpathentry>

不包括,则添加上,不同,则修改。

.project文件是否为如下:
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
	<name>netty_trunk</name>
	<comment></comment>
	<projects>
	</projects>
	<buildSpec>
		<buildCommand>
			<name>org.eclipse.jdt.core.javabuilder</name>
			<arguments>
			</arguments>
		</buildCommand>
		<buildCommand>
			<name>org.eclipse.m2e.core.maven2Builder</name>
			<arguments>
			</arguments>
		</buildCommand>
	</buildSpec>
	<natures>
		<nature>org.eclipse.m2e.core.maven2Nature</nature>
		<nature>org.eclipse.jdt.core.javanature</nature>
	</natures>
</projectDescription
>
对于没有含有项,则添加上,不同,则修改。

最后,记得刷新工作空间项目。
1
1
分享到:
评论

相关推荐

    从Github检出Mina(maven)项目出现问题解决过程

    当从Github检出一个使用Maven的项目时,开发者可能会遇到以下问题: 1. **依赖问题**:由于Maven项目依赖于许多外部库,检出后可能会发现缺少某些依赖。这通常是因为本地Maven仓库中没有这些依赖或者远程仓库(如...

    Netty 完整依赖的jar包, 你只需要下载netty源码,再添加这些jar就可以编译通过了

    在描述中提到的"只需要下载netty源码,再添加这些jar就可以编译通过了",这意味着你需要获取Netty的源代码仓库,通常可以从GitHub等开源平台获得。源代码包含了Netty的所有模块和组件,可以让你深入了解其内部工作...

    利用git从github上拉取项目

    本教程将详细介绍如何利用Git从GitHub上拉取项目,以便于你开始或参与开源项目。 首先,我们需要进行**git安装获取**。Git是一款分布式版本控制系统,可以在其官方网站(https://git-scm.com/downloads)上下载适合...

    从github上找出来在C环境下完成编译的代码

    在GitHub上找到的这个项目,已经通过了编译检查,意味着所有源代码文件在编译时没有遇到错误,这通常是项目质量的重要标志。 编译过程通常包括以下步骤: 1. **预处理**:这是编译的第一步,由预处理器(cpp)完成...

    springboot与netty整合

    SpringBoot和Netty整合是现代Java开发中一个常见的技术组合,尤其在构建高性能、轻量级的网络应用时。SpringBoot以其便捷的依赖管理和自动配置功能简化了Java应用的搭建和部署,而Netty则是一个高效的异步事件驱动的...

    手把手教你怎么从github上到项目到你的eclipse里面

    "从 GitHub 到 Eclipse 的项目导入指南" 作为 IT 行业的大师,我将为您详细解释如何从 GitHub 上获取项目并导入到 Eclipse 中的步骤。 GitHub 项目 URL 复制 首先,您需要登录到您的 GitHub 账号,并找到您想要...

    GitHubActions云编译OpenWrt_Shell_下载.zip

    标题 "GitHubActions云编译OpenWrt_Shell_下载.zip" 暗示了这是一个使用GitHub Actions服务来自动化编译OpenWrt固件的项目。OpenWrt是一个开源的嵌入式操作系统,常用于路由器设备,它允许用户自定义网络设备的软件...

    Jenkins+GitHub实现C项目的集成开发

    "Jenkins+GitHub实现C项目的集成开发"是一个典型的应用场景,它结合了两个强大的工具:Jenkins,一个开源的持续集成服务器,以及GitHub,一个广泛使用的版本控制系统。本文将深入探讨如何利用这两个工具进行C项目的...

    Netty全套学习资源(包括源码、笔记、学习文档等)

    资源包中可能包含 Netty 实例代码,这些代码可以帮助我们更好地理解 Netty 在实际项目中的应用。例如,你可以找到简单的 HTTP 服务器、WebSocket 服务、FTP 服务器或者自定义通信协议的实现,这些都是提升实践能力的...

    SpringFramework3.2 源码 github源码gradle编译

    描述中提到的难点在于,由于中国的网络环境,从GitHub下载源码可能非常慢,这可能是很多开发者遇到的问题。不过,作者已经完成了下载和Gradle编译的过程,使得其他对Spring源码感兴趣的开发者可以直接导入Eclipse...

    GitHub 完全指南:教程、常见问题解决方法和项目示例

    GitHub 完全指南:教程、常见问题解决方法和项目示例GitHub 完全指南:教程、常见问题解决方法和项目示例GitHub 完全指南:教程、常见问题解决方法和项目示例GitHub 完全指南:教程、常见问题解决方法和项目示例...

    github项目WPF UI编译后文件

    标题 "github项目WPF UI编译后文件" 暗示了这是一个基于Windows Presentation Foundation (WPF) 的用户界面(UI)项目,它已经被编译并打包在GitHub上。WPF是微软开发的一种用于构建Windows桌面应用程序的技术,它利用...

    IDEA从github导入项目发现没有iml文件.pdf

    然而,在从Github上导入项目时,偶尔会出现缺少iml文件的问题,导致项目无法正常运行。在本文中,我们将详细介绍这种问题的解决方案。 一、问题场景 在从Github上导入项目时,开发者可能会发现目录中没有项目文件...

    GitHub Actions 在线云编译 OpenWrt 固件.pdf

    利用 GitHub Actions 进行在线云编译,可以极大地简化和优化固件的编译流程,尤其适用于那些需要频繁或自动化编译的项目。以下是一些关键特性: 1. **免费**:公开仓库可以免费使用,不占用个人资源。 2. **快速...

    5个好玩的github游戏区开源项目

    对于游戏爱好者来说,GitHub 上有许多有趣的开源游戏项目,能够让我们深入了解游戏开发的过程,甚至参与其中。以下是五个涵盖 C++, Java, JavaScript 和 Rust 语言的开源游戏项目,它们不仅好玩,还能帮助我们提升...

    面向小白的Github_Action使用workflow自动编译lean_openwrt教程.docx

    面向小白的Github_Action使用workflow自动编译lean_openwrt教程.docx

    IPMItool windows版本 V1.8.18+,2022年3月10日 Github最新源代码编译。

    IPMItool windows版本 V1.8.18+,2022年3月10日 Github最新源代码编译。 项目地址:https://github.com/ipmitool/ipmitool/releases/tag/IPMITOOL_1_8_18

    librealsense在github上的下载包

    可能由于网络问题或者访问限制,直接在GitHub上下载librealsense可能遇到困难,所以这个压缩包提供了一种方便的方式,让用户可以直接下载完整的项目。 描述中提到“自己下下来放这里”,这说明了提供者已经完成了从...

    netty开发实战

    为了正确使用Netty,开发者需要了解如何搭建Netty项目,以及如何在Netty中处理TCP和UDP协议的socket服务。虽然Netty能够简化网络程序的开发,但开发者仍然需要有扎实的Java编程基础和网络编程知识。 总结来说,...

    教你如何用Github找开源项目(保姆级教程)

    教你如何用Github找开源项目(保姆级教程)教你如何用Github找开源项目(保姆级教程)教你如何用Github找开源项目(保姆级教程)教你如何用Github找开源项目(保姆级教程)教你如何用Github找开源项目(保姆级教程)教你...

Global site tag (gtag.js) - Google Analytics