Open lioolli opened 8 years ago
제가 하겠습니다
@999fg 진행해보시고, 잘 안되거나 궁금하신 내용있으면 이곳에 질문 올려주세요.
팀원으로 함께 참여하겠습니다
다른 머신으로 작업을 옮겨 pinpoint를 빌드하고 있는데요, 빌드에 문제가 생겨 질문 드립니다.
ubuntu 14.04 server입니다
/etc/environment 에
1 PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games" 2 JAVA_HOME="/usr/local/jvm/jdk1.8.0_91" 3 JAVA_6_HOME="/usr/local/jvm/jdk1.6.0_45" 4 JAVA_7_HOME="/usr/local/jvm/jdk1.7.0_79" 5 JAVA_8_HOME="/usr/local/jvm/jdk1.8.0_91" 6 M2_HOME="/opt/apache-maven-3.2.5" 7 GRADLE_HOME="/opt/gradle-2.13" 8 CLASSPATH="JAVA_HOME/lib/:$CLASSPATH" 9 PATH="$PATH:$JAVA_HOME/bin:$M2_HOME/bin:$GRADLE_HOME/bin"
위와 같이 JAVA_6_HOME, JAVA_7_HOME, JAVA_8_HOME을 모두 설정하였는데, pinpoint를 받아서 mvn install -Dmaven.test.skip=true를 실행하면
[INFO] ------------------------------------------------------------------------ [INFO] Building pinpoint 1.6.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-enforcer-plugin:1.4.1:enforce (enforce-pinpoint-build-requirements) @ pinpoint --- [WARNING] Rule 2: org.apache.maven.plugins.enforcer.RequireEnvironmentVariable failed with message: Environment variable "JAVA_6_HOME" is required for this build. [WARNING] Rule 3: org.apache.maven.plugins.enforcer.RequireEnvironmentVariable failed with message: Environment variable "JAVA_7_HOME" is required for this build. [WARNING] Rule 4: org.apache.maven.plugins.enforcer.RequireEnvironmentVariable failed with message: Environment variable "JAVA_8_HOME" is required for this build.
와 같은 log가 뜨면서 BUILD FAILURE가 납니다ㅜㅜ 제가 뭔가 실수를 했을까요? echo $JAVA_6_HOME같은거 찍어보면 잘 찍힙니다ㅜㅜ
환경변수만 설정돼 있으면 되는데요;; maven 실행시킨 터미널에서 echo $JAVA_6_HOME 해보신 건가요?
머신을 껐다 켰더니 되더군요ㅜㅋㅋ빨리 진행하겠습니다.
어떤 branch에서 작업하고 풀리퀘 보내면 되나요?? 풀리퀘는 마스터로 바로 보내면 될까요?
@999fg master에서 브랜치 따서 작업하시고 master로 PR 보내시면 됩니다~
pom.xml을 수정하여,
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>animal-sniffer-maven-plugin</artifactId>
<version>1.9</version>
<configuration>
<signature>
<groupId>org.codehaus.mojo.signature</groupId>
<artifactId>java16</artifactId>
<version>1.0</version>
</signature>
</configuration>
<executions>
<execution>
<id>ensure-java-1.6-class-library</id>
<phase>test</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
를 추가하고 mvn clean compile animal-sniffer:check를 실행하면 다음과 같은 에러가 발생합니다.
[ERROR] /home/ubuntu/cs494/pinpoint/pinpoint/thrift/src/main/java/com/navercorp/pinpoint/thrift/io/ByteBufferOutputStream.java:61: Undefined reference: sun.nio.ch.DirectBuffer [ERROR] /home/ubuntu/cs494/pinpoint/pinpoint/thrift/src/main/java/com/navercorp/pinpoint/thrift/io/ByteBufferOutputStream.java:62: Undefined reference: sun.nio.ch.DirectBuffer [ERROR] /home/ubuntu/cs494/pinpoint/pinpoint/thrift/src/main/java/com/navercorp/pinpoint/thrift/io/ByteBufferOutputStream.java:62: Undefined reference: sun.misc.Cleaner sun.nio.ch.DirectBuffer.cleaner() [ERROR] /home/ubuntu/cs494/pinpoint/pinpoint/thrift/src/main/java/com/navercorp/pinpoint/thrift/io/ByteBufferOutputStream.java:64: Undefined reference: void sun.misc.Cleaner.clean()
제가 pom.xml에 추가한 내용은 이 프로젝트의 api들이 java 1.6 compatible 한지 테스트하는것인데, 이렇게 에러로 걸리는 library(sun.ni.ch.DirectBuffer 등)를 검색해보니 1.6 버전도 있고 1.7버전도 있어서 맞게 한것인지, 틀리게 한것인지 모르겠습니다. 무엇이 문제였을까요?ㅜㅜpinpoint에 사용된 sun.ni.ch.DirectBuffer는 어떤 idk 버전의 라이브러리인가요?
원래 sun으로 시작하는 패키지는 jdk에 포함되지 않는 것들이라 그런 것 같네요. Sun에서 JVM 만들 때 내부 구현용 코드들을 sun 패키지에 넣어 놓은 건데, 이런저런 이유로 sun에 있는 패키지들을 가져다 사용하는 경우가 있고 pinpoint도 마찬가지입니다.
http://www.mojohaus.org/animal-sniffer/animal-sniffer-maven-plugin/examples/checking-signatures.html
여기 보면 ignore 설정하는 방법이 있습니다. 여기 참고하셔서 sun.*
을 무시하도록 하면 될 것 같습니다.
감사합니다! 덕분에 거의 다 온 것 같습니다.
말씀해 주신 대로, ignore를 하고 진행하였더니 대부분의 api가 통과하였으나, pinpoint-web에서 Long.compare 와 java.util.Object.toString 부분이 통과하지 못했습니다. 검색해 보니, java 1.7버전에서 나온 library인 것 같은데요! 이 경우 어떻게 해야 할까요..?
일단은 테스트에 걸리는 두 개의 api는 ignore하도록 하였습니다.
현재 mvn install -Dmaven.test.skip = true를 실행하며 빌드하게 되면 자동으로 animal sniffer plugin이 적용되며 java 6 compatible 한지 테스트하도록 되어 있습니다. 이 상태로 PR 보내겠습니다!
@999fg 아, pinpoint-web은 jdk 1.7을 사용하고 있습니다. 원래대로라면 web/pom.xml에 1.7로 설정해 주어야 하는데요, ignore 처리 해서 보내주세요
그 PR 보낼 때 궁금해서요.. pinpoint repo를 fork 한 후, fork된 repo에서 브랜치를 따서 작업하고 PR을 fork된 repo의 master로 보내나요, 원래 pinpoint repo의 master로 보내나요??(가능한가요..?)
아니면 fork된 repo의 master에서 작업하고 그냥 이걸 원래 repo로 PR 보내면 될까요..?
@999fg fork 하신 리파지토리에서는 어떤 브랜치에서 작업하시든 상관 없습니다. PR은 pinpoint의 master로 보내시면 되구요.
PR 보냈습니다!
Pinpoint는 Java 6 JVM에서도 정상적으로 동작해야 한다. 하지만 대부분의 개발자가 Java 7 이상을 사용하기 때문에 종종 Pinpoint에 Java 7 이상에만 존재하는 API를 사용하는 소스를 추가하는 실수가 발생하고 있다. 이를 방지하기 위해 Animal Sniper 플러그인을 적용하여 maven 빌드 시, Java 6에 없는 API를 사용한 것이 있는지 확인하도록 한다.
Animal Sniper: http://www.mojohaus.org/animal-sniffer/animal-sniffer-maven-plugin/