flutter 를 배울때, 에뮬레이터로 실행하다보면 오른쪽에 debug 라는 글자가 꽤 거슬릴때가 있는데...

다행히 MaterialApp 의 속성에서 debugShowCheckedModeBanner 속성만 추가하면 쉽게 제거 가능하다.

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title : 'AppBar',
      theme: ThemeData(
        primarySwatch: Colors.red
      ),
      home: MyPage(),
      debugShowCheckedModeBanner: false, // <-- 이 라인을 추가
    );
  }
}

저렇게 속성을 추가하고, 저장하면 핫리로드 기능을 통해 바로 확인가능하다.

개요

git 을 java에서 컨트롤하는 라이브러리가 존재하는데 이를 jgit 이라고 한다.

아래와 같은 라이브러리 의존성을 추가해서 사용하면 되는데 clone 하는 예시를 보고 테스트를 하는데 이런 오류가 발생한다.

implementation("org.eclipse.jgit:org.eclipse.jgit:4.5.0.201609210915-r")
Exception in thread "main" org.eclipse.jgit.api.errors.InvalidRefNameException: Branch name <null> is not allowed
	at org.eclipse.jgit.api.CheckoutCommand.processOptions(CheckoutCommand.java:518)
	at org.eclipse.jgit.api.CheckoutCommand.call(CheckoutCommand.java:204)

해결법

우선 내가 사용한 예제는 코틀린으로 했었는데, 아래와 같이 checkout 시 setAllPaths 를 생략하면 동일한 오류가 발생했다.

혹시 나랑 동일한 오류를 겪는다면, setAllPaths 를 true 로 지정해보길 바란다. (아래와 같이 주석으로 빼두면 오류 발생)

 

val credentialsProvider = UsernamePasswordCredentialsProvider("<아이디>", "<패스워드>")
val gitUri = "<GIT 주소>"

val cloneCommand: CloneCommand = Git.cloneRepository()
    .setURI(gitUri)
    .setDirectory(File("/Users/guest/git-test"))
    .setNoCheckout(true)
    .setCredentialsProvider(credentialsProvider)
val git:Git = cloneCommand.call()
git.checkout()
    .setStartPoint("origin/master")
//    .setAllPaths(true)
    .call()
git.repository.close()

Zookeeper? Curator ?

주키퍼를 이용해 master 를 점유하고, 작업을 분배하는걸 만들려고 했는데 

API 가 callback 구조로 만들어서 꽤 복잡하다.


그래서, 넷플릭스에서 만들고 아파치재단에 탑프로젝트로 올라온 curator 라는 프로젝트가 존재했다.

고수준의 주키퍼 API 랄까?


샘플코드와 오류!

JmcSample.java
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.leader.LeaderSelector;
import org.apache.curator.framework.recipes.leader.LeaderSelectorListener;
import org.apache.curator.framework.state.ConnectionState;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.zookeeper.*;
import java.io.Closeable;
import java.io.IOException;

public class JmcSample {

    public static void main(String []argv) throws Exception {

        final String hostPorts = "11.11.11.11:2181/tost";
        String serverId = "===server0001===";
        CuratorFramework client;        
        client = CuratorFrameworkFactory.newClient(hostPorts, new ExponentialBackoffRetry(1000, 4));

        client.start();
        client.getZookeeperClient().blockUntilConnectedOrTimedOut();

        System.err.println("PERSISTENT > ");
        client.create().withMode(CreateMode.PERSISTENT).forPath("/"); // 즉 '/tost' 라는 폴더 생성
        client.close();

	}
}


* log

2017-08-17 12:11:32,209 [myid:] - WARN  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:ZooKeeperServer@749] - Received packet at server of unknown type 15

2017-08-17 12:11:32,209 [myid:] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1044] - Closed socket connection for client /10.10.10.10:58956 which had sessionid 0x15dbc19c3140034

2017-08-17 12:11:34,000 [myid:] - INFO  [SessionTracker:ZooKeeperServer@358] - Expiring session 0x15dbc19c3140032, timeout of 40000ms exceeded

2017-08-17 12:11:34,001 [myid:] - INFO  [ProcessThread(sid:0 cport:2181)::PrepRequestProcessor@486] - Processed session termination for sessionid: 0x15dbc19c3140032

2017-08-17 12:11:48,000 [myid:] - INFO  [SessionTracker:ZooKeeperServer@358] - Expiring session 0x15dbc19c3140033, timeout of 40000ms exceeded

2017-08-17 12:11:48,001 [myid:] - INFO  [ProcessThread(sid:0 cport:2181)::PrepRequestProcessor@486] - Processed session termination for sessionid: 0x15dbc19c3140033



해결법


이유는 단순했다. CDH 버전의 주키퍼와 버전을 맞추기위해 3.4.x 버전을 사용했는데, 버전충돌이 문제였다.

저렇게 하고 실행하니 성공한다. 허허허


* pom.xml

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.0.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.zookeeper</groupId>
                    <artifactId>zookeeper</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.10</version

        </dependency>


+ Recent posts